흔히 사용하는 cin 함수가 어떻게 입력을 받는지 정확히 알아야 풀 수 있는 문제였다.

 

문제

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

입력

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

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

 

백준 문제 링크 : www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

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

www.acmicpc.net

핵심 포인트

1. cin입력값을 char형 변수로 받으면 한 글자씩 "문자"로 받는다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int n;
int answer;
char k; // k : 입력되는 숫자들을 임시로 저장, answer : k를 계속 더한 값을 저장


int main(int argc, char* argv[]) {
	ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> n;
    
    while(n--){ // 이렇게 반복문 짜면 정확히 n번 실행된다. 대신, n값이 계속 바뀌므로 변수 n을 다시 사용해야 한다면 이렇게 짜면 안된다.
        cin >> k;
        answer += (k - 48); // 문자 '1'은 변수 k에 49로 저장되어 있기 때문에 차이(48)을 빼주면 숫자 1이 된다.
    }
    
    cout << answer << '\n';
	
	return 0;
}

알면 쉬우나 모르면 못 푸는 문제다.

나 같은 경우 한 글자씩 받기 위해 char형 변수를 사용했다.

다만 char형으로 받을 경우 문자로 저장되기 때문에,

1을 받는다면 숫자 1이 아닌 문자 1이 된다.

 

아스키코드 표를 보게 되면,

ASCII 코드 표, 출처 : https://hack-cracker.tistory.com/166

숫자 1은 아스키코드로 그냥 1이지만, 문자 1은 아스키코드로 49이다.

cin함수가 char형 변수에 입력할 때는 1을 받으면 문자 1로 인식하여 실제 메모리에는 49라는 값을 저장한다.

그리고 cout함수는 49가 저장되어 있는 char형 변수를 읽으면서 "아 얘는 char형(==문자)니까 49에 해당하는 문자로 출력해야지!" 하고 문자 1을 출력한다."

 

문제를 풀기 위해 모든 값을 더해야 하므로, 문자 1이 아닌 숫자 1이 필요하다.

따라서 49가 1이고 50이 2이고 51이 3인 것을 각각 48을 빼준다면..!

문자 1을 숫자 1, 문자 2를 숫자 2로 생각할 수 있게 된 것이다. 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기