lastnamesong
[C++] '0'을 숫자 0으로 바꾸는 방법 (자료형, char, int) 본문
이전 글에서 풀이했던 백준의 미로 관련 문제들을 보면 띄어쓰기 없이 입력 받는 것을 볼 수 있었다.
이런 문제를 풀기 위해서 우리는 숫자 형태의 데이터를 2차원 배열에 저장해야 한다. 그런데 막상 cin
으로 입력을 받아보면, 생각보다 쉽지 않다. 이번 글에서는 이런 상황에서 char
자료형과 '0'
의 관계, 그리고 왜 c - '0'
이라는 코드를 쓰는지 정리해본다.
숫자를 char
로 받는 이유
먼저, 위 입력에서 한 줄을 보면 101010
처럼 공백 없이 숫자들이 이어져 있다. 이걸 cin
으로 입력 받을 때, 많은 입문자들이 이렇게 생각하곤 한다.
int num;
cin >> num; // 한 글자씩 숫자를 받는다?
하지만 이렇게 하면 한 줄 전체가 하나의 정수로 읽힌다.
즉, 101010
이 숫자 하나로 들어오는 것이지, 1
, 0
, 1
, 0
, 1
, 0
으로 나뉘지 않는다. 이건 우리가 원하는 입력 방식이 아니다.
그래서 아래와 같이 char
를 써야 한다.
char c;
cin >> c;
이렇게 하면 공백없이 이어진 숫자 문자열에서도 한 글자씩 입력받을 수 있다. "101010"
이라면 c
에 '1'
, '0'
, '1'
... 이런 식으로 들어온다.
그런데, char
은 숫자가 아니다. 즉, '1'
은 우리가 알고 있는 숫자 1이 아니다. 문자형 '1'
, 즉 ASCII 코드 49번이다. '0'
은 ASCII 코드 48번이다. 그러니 우리가 숫자로 쓰고 싶다면 아래와 같은 작업이 필요하다.
int num = c - '0';
즉, '1' - '0' = 49 - 48 = 1
이 되고, 문자 '1'
을 정수 1로 변환해주게 된다.
예제
다음과 같은 코드를 실행하면 바로 확인할 수 있다.
char c;
cin >> c;
int value = c - '0';
cout << value << endl;
입력: 1 → 출력: 1
입력: 0 → 출력: 0
만약 c - '0'
을 안 하고 그냥 출력하면 어떻게 될까?
char c;
cin >> c;
cout << c << endl;
이 경우 출력은 문자 '1'
이다. 우리가 원하는 숫자 1이 아니라, 단지 문자 '1'
를 그대로 출력한 것이다.
공백으로 구분되어 있는 입력이라면 당연히 int
로 받을 수 있다.
하지만 미로 탐색 문제처럼 숫자들이 공백 없이 붙어 있을 경우, cin >> int
로는 분리해서 받을 수 없다. 그래서 문자로 한 글자씩 받아야 하고, 그걸 숫자로 바꾸는 과정이 필요한 것이다.
문자열로 숫자를 처리하는 경우가 종종 있을 것 같으므로 잘 기억해두면 좋겠다..
'Algorithm' 카테고리의 다른 글
그리디 알고리즘 (Greedy Algorithm) (0) | 2025.04.21 |
---|---|
[C++] DFS 관련 문제 (백준 10451번, 순열 사이클) (0) | 2025.04.10 |
[C++] BFS 관련 문제 (백준 2206번, 벽 부수고 이동하기) (0) | 2025.04.07 |
[C++] BFS 관련 문제 (백준 2178번, 미로 탐색) (0) | 2025.03.31 |
[C++] DFS 관련 문제 (백준 13023번, ABCDE) (0) | 2025.03.28 |