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)