https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
문제 이해하기
단계별 문제 중 '문자열'에 속해 있던 문제였는데, 나는 당최 어느 부분에서 문자열을 이용해야 하는지 이해할 수 없었다고 한다.....그래서 그냥 생각 없이(이러면 안되는데 말이야...) 막 코드를 작성하다가 알았다. 문제에서 중요한 것은 문제의 입력 부분에 '둘째 줄에 숫자 N개가 공백없이 주어진다' 는 조건이다.
이렇게 공백 없이 숫자를 입력하고 이를 한 자리 한 자리 나눠서 숫자로 인식하려면, 입력받을 때 int타입으로 받으면 안된다.
int input[100];
int sum=0;
for(int i=0; i<n; i++){
cin >> input[i];
sum+=input[i];
}
cout<<sum;
이렇게 int 타입으로 하면, 숫자를 enter 입력으로 구분하여 입력하게 되기 때문에 안된다.
그래서 char 타입을 사용해야 하고, 그래서 문자열 단계의 문제였던 것이다.......
코드로 표현하기
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
char ch[100]; //공백없이 하나씩 받아야 하므로
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> ch[i];
sum += ch[i] - 48; //char형으로 받았으므로, 아스키코드 '0'의 값인 48을 빼줌 -> int타입으로 변환
//sum += ch - '0';
}
cout << sum;
}
요로코롬....
아스키코드에서 숫자는 48부터 시작되기 때문에 입력받은 문자에 48 혹은 '0'을 빼주어야 int타입 숫자로 변환된다.
위에는 문자 배열을 사용했는데 굳이 배열에 저장할 필요는 없어보이고, 그냥 입력받은 거 합계에 더해주기만 해도 될 것 같음
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
char ch;
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> ch;
sum += ch -48;
//sum += ch - '0';
}
cout << sum;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1712번: 손익분기점 (0) | 2022.02.25 |
---|---|
[C++] 백준 10809번: 알파벳 찾기 (0) | 2022.02.07 |
[C++] 백준 1546번: 평균 (0) | 2022.01.29 |
[C++] 백준 1110번: 더하기 사이클 (0) | 2022.01.28 |
[C++] namespace (0) | 2022.01.18 |