728x90
반응형

문제

8595번 : 히든 넘버

 

8595번: 히든 넘버

문제 단어에 숫자가 숨어있다. 이 숫자를 히든 넘버라고 한다. 알파벳 대/소문자와 숫자로 이루어진 단어가 주어졌을 때, 모든 히든 넘버의 합을 구하는 프로그램을 작성하시오. 단어와 히든 넘버는 아래와 같은 성질을 갖는다. 연속된 숫자는 한 히든 넘버이다. 두 히든 넘버 사이에는 글자가 적어도 한 개 있다. 히든 넘버는 6자리를 넘지 않는다. 입력 첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어

www.acmicpc.net

 

내가 작성한 코드 (C++ 성공)

#include <iostream>
#define MAX 50000001

using namespace std;

char str[MAX];

int main(){
	cin.tie(0);
	int n;
	cin >> n >> str;
	
	int num;
	long long sum = 0, res = 0;
	int d = 1;
	
	for(int i=n-1; i>=0; i--){
		if(i == 0) {
			if('0'<= str[i] && str[i]<='9'){
				num = str[i]-'0';
				sum += num * d;
				d *= 10;
				if(sum>999999) sum = 0;
				res += sum;
			}
		}
		if('0'<=str[i] && str[i]<='9'){
			num = str[i]-'0';
			sum += num * d;
			d *= 10;
		} else {
			d = 1;
			if(sum>999999) sum = 0;
			else {
				res += sum;	
				sum = 0;
			}
		}
	}
	
	cout << res << "\n";

	return 0;
}

 

정리

문자 사이에 있는 숫자를 찾아서 더해주는 문제였다.

그리고 문제에서 3가지 조건을 제시해 주었다

- 연속된 숫자는 한 히든 넘버이다.
- 두 히든 넘버 사이에는 글자가 적어도 한 개 있다.
- 히든 넘버는 6자리를 넘지 않는다.


문자로 받아서 비교해야하기 때문에 각 숫자의 자릿수를 계산해서 더해주어야 한다는 점
그래서 문자를 입력하고 거꾸로 출력해서 숫자를 찾았다.
숫자일 경우 문자를 정수로 바꿔주었다. 그리고 자릿수를 계산해주어야하기 때문에 1부터 10을 계속 곱해서 더해주었다.
그렇게 해야만 자릿수 그대로 더해주기 쉽기 때문이다.

그리고 몇 가지 생각해야할 부분이 있었는데
히든 넘버는 6자리를 넘지 않는다는 부분과 첫 문자가 숫자일 경우였다.
그래서 히든 넘버가 999999 보다 크지 않을 경우만 더했고 첫 문자가 숫자일 경우에는 따로 더해서 계산해주었다.

몇 가지 예외만 잘 생각한다면 쉽게 해결할 수 있는 문제였다.

728x90
반응형
복사했습니다!