Coding/BOJ

[BOJ 백준] 11720 - 숫자의 합 (C++ / Python)

Dev_Klare 2023. 11. 14. 22:56

문제 바로가기

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


관련 알고리즘

- ASCII 코드


정답 및 해설

정수를 입력받아 각 자릿수의 합을 구하는 간단한 문제...라고 볼 수 있지만,

입력받는 정수가 무려 100개, 즉 100자리 수이다.

int 타입은 물론, long long int까지 써도 모자라기 때문에 문자열로 처리해야 한다.

각 자릿수를 문자로 받아 정수로 변환하여 답을 구하고

이 방법은 이후 큰 자릿수를 다루는 문제에서도 종종 사용되니 꼭 숙지할 필요가 있다.


C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    int tot=0,N;
    char s;
    cin>>N;
    while(N--){
        cin>>s;
        tot+=s-'0';
    }
    cout<<tot;
}

 

Line 해설
4~5 풀이에 사용할 변수를 선언하였다.
int tot : 각 자리수의 총합
int N : 입력받을 정수의 개수
char s : 입력받은 각 자리 정수 (정수를 입력받지만 문자 타입으로 입력)
6~7 정수의 개수 N을 입력받고, while(N--) 반복문으로 N번 반복
8~9 cin>>s; 문으로 한 자리 정수를 입력받는다.
만약 s를 char s[100]으로 선언하였다면 모든 정수를 배열 형태로 입력받겠지만
지금은 char s로 선언하였기에 단 한개의 정수만 입력받을 수 있다.
이때 문자의 형태로 입력된 0은 integer 타입으로 출력해보면 정수값이 0이 아닌, 문자 '0'의 ASCII 코드 값인 48이 출력되는 것을 확인할 수 있다.
따라서 이전 문제에서 알파벳을 배열로 다루듯이 s-'0'을 계산하여야 실제 정수가 무엇인지 알 수 있다.
tot += s-'0'; 문을 통해 해당 한 자리 정수를 tot 에 모두 더한다.
11 cout<<tot;로 모든 정수의 합을 계산하여 정답을 구한다.

Python

더보기
N=int(input())
Num=input()
tot=0;
for i in Num:
    tot+=int(i)
print(tot)

 

Line 해설
1~2 정수의 개수 N과 바로 이어 N개의 정수로 이루어진 문자열 Num을 입력받는다
3 모든 자리수의 합을 저장할 변수 tot를 선언하고 동시에 0으로 초기화한다.
4~5 for 반복문을 통해 문자열 Num의 각 자리 문자를 i로 반복한다.
tot 변수에 문자로 저장되어 있는 변수 i를 int()함수를 이용하여 정수로 변환한 뒤 더해준다.
6 tot를 출력하여 정답을 구한다.

※ 해설에서는 변수 N을 사용하지 않고 풀이했다. N과 len(Num)의 값이 동일하기 때문에 사용하지 않고도 풀이할 수 있던 것이다. 만약 사용한다면 아래와 같이 풀이할 수 있겠다.

N=int(input())
Num=input()
tot=0;
for i in range(N):
    tot+=int(Num[i])
print(tot)