백준 11720번 문제풀이



처음에, 자릿수마다 더하면 되겠다 라고 생각하여

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
 
using namespace std;
 
int main()
{
    int N;
    int input;
    int sum = 0;
    int divide=1;
 
    cin >> N;
    cin >> input;
 
    for (int i = 0; i < N-1; i++)
    {
        divide *= 10;
    }
 
    for (int i = 0; i <N; i++)
    {
        sum += (input / divide);
        input = input % divide;
        divide = divide/10;
    }
 
    cout << sum << endl;
}
cs


이렇게 코딩을 진행하였으나, 생각해보니 intput값은 int형으로 정의했고

int형은 -2^(비트수-1) ~ 2^(비트수-1) 사이의 값만 가질 수 있다는 것을 간과했습니다.


2147483647이상의 수가 들어오면 제대로된 연산이 불가능합니다. 그래서 다른 방법을 써야겠다고 생각했습니다.


그 방법은 생각이 나질 않아서

다른 분들이 하신 풀이를 보고 했습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
 
using namespace std;
 
int main()
{
    int N;
    int sum = 0;
    char input;
 
    cin >> N;
 
    for (int i = 0; i < N; i++)
    {
        cin >> input;
        sum += (input - 48);
    }
 
    cout << sum;
}
cs


정답 코드입니다.


숫자를 하나씩 받기위해서 char형을 사용해주었습니다.

아스키코드 표를 보면 0은 48입니다.

char형으로 숫자를 받아왔기 때문에, 저희가 사용하는 숫자로 나타내려면 -48(-'0')을 해주어야 합니다.


+ Recent posts