오늘 프로그래머스 문제 [문자열 정렬하기1]를 풀면서 문자열 안에 있는 숫자만 추출하여 정렬하는 문제를 접했다.
처음에는 문자열에서 숫자를 어떻게 판별하고, 또 어떻게 실제 숫자(int)로 변환해야 하는지 감이 잘 오지 않았다. 그런데 아래 코드가 굉장히 인상적이었다.
if(c >= '0' && c <= '9') {
list.add(c - '0');
}
처음 봤을 때는 단순한 조건문처럼 보였지만, 실제로는 문자(Character)를 숫자(Integer)로 변환하는 중요한 아이디어가 담겨 있었다.
1. 문자도 결국 숫자다
Java의 char는 내부적으로 문자 자체를 저장하는 것이 아니라 유니코드(Unicode) 값을 저장한다.
예를 들어 다음과 같은 값을 가진다.
'0' = 48
'1' = 49
'2' = 50
...
'9' = 57
따라서
c >= '0' && c <= '9'
라는 조건은
48 <= c <= 57
과 같은 의미가 된다.
즉, 해당 문자가 숫자인지 판별하는 코드인 것이다.
2. 문자 숫자를 실제 숫자로 변환하기
더 흥미로웠던 부분은 다음 코드였다.
c - '0'
예를 들어
c = '7'
이라면
'7' - '0'
은 실제로
55 - 48
이 되고,
결과는
7
이 된다.
즉, 문자 '7'을 숫자 7로 변환하는 것이다.
3. 왜 중요한가?
문자열을 다루는 코딩테스트 문제에서는 다음과 같은 유형이 매우 자주 등장한다.
- 문자열에서 숫자만 추출하기
- 문자열 속 숫자의 합 구하기
- 각 자릿수를 배열로 저장하기
- 숫자만 정렬하기
- 숫자 개수 세기
이런 문제를 만났을 때
if(c >= '0' && c <= '9')
로 숫자를 판별하고,
c - '0'
으로 숫자로 변환하는 패턴을 바로 떠올릴 수 있어야 한다.
'TIL' 카테고리의 다른 글
| [Troubleshooting] 자바 제네릭 T 타입으로 사칙연산이 불가능한 이유 (0) | 2026.06.08 |
|---|---|
| [TIL] 자바 catch문에는 왜 Exception 타입만 들어갈 수 있을까? (0) | 2026.06.08 |
| [TIL] 시간복잡도는 if문 개수보다 반복 횟수가 중요한 이유 (0) | 2026.06.06 |
| [TIL] 코딩테스트에서 Arrays 클래스가 중요한 이유 (0) | 2026.05.28 |
| [TIL] 코딩테스트를 풀다가 StringBuilder의 필요성을 직접 체감하다. (0) | 2026.05.27 |