문제 바로가기
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)
'Coding > BOJ' 카테고리의 다른 글
| [BOJ 백준] 1181 - 단어 정렬 (C++) (0) | 2023.11.16 |
|---|---|
| [BOJ 백준] 1018 - 체스판 다시 칠하기 (C++) (0) | 2023.11.16 |
| [BOJ 백준] 10818 - 최소, 최대 (C++) (0) | 2023.11.14 |
| [BOJ 백준] 10809 - 알파벳 찾기 (C++) (0) | 2023.11.12 |
| [BOJ 백준] 10250 - ACM 호텔 (C++ / Python) (1) | 2023.11.11 |