백준/C++

[백준] 11720번: 숫자의 합 | C++ 풀이

성실한 당근농부 2023. 5. 17. 23:27

# 문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

 

 


 

# 풀이

공백없이 적힌 숫자를 하나씩 받아오려면? 문자열을 사용하면 된다.

아주 간단한 문제! 바로 정답 소스코드를 확인해보자.

 

#include <iostream>
using namespace std;

int main(){
    int t;
    int sum = 0;
    string num;

    cin >> t >> num;
    for(int i=0; i<t; i++){
        sum += (num[i] - '0');
    }

    cout << sum;
    return 0;
}

 

숫자의 개수를 담을 t, 합을 계산해줄 sum 변수를 정수형으로

문자를 받아줄 num 변수를 문자열로 선언해주면 준비 끝!

 

그 후엔 매번 하던대로 입력을 받아 계산해 출력해주면 되는데 잠시 문제가 있다.

바로 숫자를 문자열로 입력받았기 때문에 한 자리씩 떼어도 숫자 연산이 불가능하다는 것이다.

 

 

간단하게 코드를 짜 확인해보면 한자리씩 떼어낸 숫자가 모두 char형인 것을 확인할 수 있다.

이때는 int형으로 변환해 계산하면 되는데 여기서는 아스키코드 연산을 활용해 계산해주었다.

 

 

for(int i=0; i<t; i++){
    sum += (num[i] - '0');
}
'0' - '0'은 아스키 코드 값으로 48 - 48 = 0
'1' - '0'은 아스키 코드 값으로 49 - 48 = 1
'2' - '0'은 아스키 코드 값으로 50 - 48 = 2
...
'9' - '0'은 아스키 코드 값으로 57 - 48 = 9

 

하지만 이때 '0'~'9'과의 연산에서만 원하는 결과가 나올 수 있음에 유의하자.

만약 '0'~'9'가 아닌 다른 문자가 올 경우 아스키 연산을 통해 원하지 않던/예상치 못한 값이 나올 수 있다.

 

연산을 마친 후엔 구해둔 sum을 출력해주면 끝!

 

 

 


 

 

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

728x90