[백준 BOJ] 23037번 5의 수난 (C++/cpp)

2022. 9. 25. 02:19PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/23037

 

23037번: 5의 수난

키파는 문득 3과 4의 견고한 벽에 가로막혀 스포트라이트를 받지 못하는 5를 떠올렸다. '세상에 얼마나 많은 것들이 5와 관련이 있는데!' 키파는 5가 쓰이는 곳을 떠올리기 시작했다. 사람의 손가

www.acmicpc.net

백준 BOJ 23037번 5의 수난 문제 사진1
백준 BOJ 23037번 5의 수난 문제 사진2

 

접근 방법 - 아스키코드에 대한 연산 응용문제

백준의 23037번 문제는 문자열에 대한 연산을 응용하여 해결해야 하는 문제이다.

해당 문제는, 주어진 숫자에 대해 각 자릿수를 다섯 제곱한 수들을 모두 합한 결괏값을 출력해야 하는 문제이다.

여러 해결 방법이 있겠지만, 필자와 같은 경우엔 문자열로 입력을 받아 연산을 진행하였다.

문자형 타입으로 숫자를 입력받았다 하더라도 이에 대한 아스키코드 값을 이용하면 된다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 문자열 형태로 숫자(st)를 입력받는다.

 

2) 결괏값을 저장할 변수 sum을 0으로 초기화하여 선언한다.

 

3) st의 길이만큼 반복문을 수행하여 아래의 연산을 취한다.

- 임의의 변수 num을 선언해, 현재 st 탐색값에 '0'에 대한 값을 뺀 숫자를 저장하도록 한다.

(문자형으로 입력받은 값을 아스키코드 값을 이용해 실제 숫자의 값으로 변환하는 과정이다.)

- 해당 탐색값에 대하여 다섯 제곱한 수를 변수 result에 저장하도록 하고, result의 값을 sum에 더하도록 한다.

(사실 번거롭게 result 변수를 쓸 필요는 없다)

 

4) 최종적으로 저장된 sum의 값을 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

//백준 23037번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	string st;
	cin >> st;
	
	int sum = 0;
	for (int i = 0; i < st.length(); i++) {
		int num = st[i] - '0';
		int result = 1;
		for (int j = 0; j < 5; j++) {
			result *= num;
		}
		sum += result;
	}
	cout << sum << endl;
}

 

제출 결과

백준 BOJ 23037번 5의 수난 문제 C++ 제출 결과

(2022.07.04 백준 23037번 문제 제출 결과)

다시 보니 한때 브론즈5 문제였다는 게 믿기지 않는다...

반응형