728x90
반응형
문제
내가 작성한 코드 (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
반응형
'알고리즘 > BaekJoon' 카테고리의 다른 글
[백준 알고리즘] 17284번 : Vending Machine (0) | 2019.08.15 |
---|---|
[백준 알고리즘] 17283번 : I am Groot (0) | 2019.08.15 |
[백준 알고리즘] 1193번 : 분수찾기 (0) | 2019.08.15 |
[백준 알고리즘] 10250번 : ACM 호텔 (0) | 2019.08.15 |
[백준 알고리즘] 1011번 : Fly me to the Alpha Centauri (0) | 2019.08.15 |