문제
https://school.programmers.co.kr/learn/courses/30/lessons/120834

풀이
class Solution {
public String solution(int age) {
String ageStr = String.valueOf(age);
StringBuilder result = new StringBuilder();
for (int i = 0; i < ageStr.length(); i++) {
int digit = ageStr.charAt(i) - '0';
result.append((char) ('a' + digit));
}
return result.toString();
}
}
코드 설명
- String.valueOf(age) → 숫자를 문자열로 변환
예: 23 → "23" - 각 문자('2', '3')를 순회하면서
- '0'을 빼서 정수 값으로 변환 ('2' - '0' = 2)
- 'a'에 해당 숫자만큼 더해 알파벳으로 변환 ('a' + 2 = 'c')
- 변환된 문자를 StringBuilder에 차곡차곡 추가
- 완성된 문자열을 toString()으로 반환
'0' 빼기의 역할
문자형 숫자 → 실제 숫자값으로 변환
| 문자 | 내부 코드값 | '0'의 코드값(48) | 연산 결과 |
| '0' | 48 | 48 | 0 |
| '1' | 49 | 48 | 1 |
| '2' | 50 | 48 | 2 |
| '9' | 57 | 48 | 9 |
'3' - '0' == 3
- 이 식을 통해 문자 '3'을 정수 3으로 변환
'a' 더하기의 역할
숫자값 → 알파벳 문자로 변환
| 숫자 | 'a'의 코드값(97) | 'a' + 숫자 | 결과 문자 |
| 0 | 97 | 'a' + 0 = 97 | 'a' |
| 1 | 97 | 'a' + 1 = 98 | 'b' |
| 2 | 97 | 'a' + 2 = 99 | 'c' |
| … | … | … | … |
| 9 | 97 | 'a' + 9 = 106 | 'j' |
(char)('a' + 2) == 'c'
- 이렇게 숫자 2를 'c'로 바꿀 수 있음
전체 변환 과정 예시 (age = 23)
| 단계 | 문자 | '0' 빼기 | 'a' 더하기 | 결과 문자 |
| 1 | '2' | 2 | 'a' + 2 → 'c' | 'c' |
| 2 | '3' | 3 | 'a' + 3 → 'd' | 'd' |
- ➡ 최종 결과: "cd"
정리 문장
- '0' 빼기 → 문자형 숫자를 실제 숫자로 바꾼다.
- 'a' 더하기 → 숫자값을 대응하는 알파벳 문자로 바꾼다.
문자(char) 와 아스키(유니코드) 코드 값의 연산
문자 'a'의 내부 값
문자 'a'는 단순히 글자처럼 보이지만,
컴퓨터 안에서는 숫자 97로 저장됨
(유니코드/아스키 코드 값이 97)
| 문자 | 코드값 |
| 'a' | 97 |
| 'b' | 98 |
| 'c' | 99 |
| 'd' | 100 |
'a' + 3의 실제 계산 과정
'a' + 3
- 'a' → 97
- 97 + 3 → 100
- 100은 문자 'd'에 해당
그래서
(char)('a' + 3) == 'd'
정리
- 문자 'a'는 숫자 97로 저장되어 있음
- 문자에 숫자를 더하면, 그만큼 다음 알파벳으로 이동
- 즉, 'a' + 0 → 'a'
- 'a' + 1 → 'b'
- 'a' + 2 → 'c'
- 'a' + 3 → 'd'
한 줄 요약
'a' + 3 은 'a'의 코드값(97)에 3을 더해 100이 되고,
코드값 100은 'd'이기 때문에 결과는 'd'
'Algorithm > Programmers' 카테고리의 다른 글
| [Programmers] Lv.0 | 짝수의 합 | Java (0) | 2025.10.26 |
|---|---|
| [Programmers] Lv.0 | 배열 자르기 | Java (0) | 2025.10.25 |
| [Programmers] Lv.0 | 진료순서 정하기 | Java (0) | 2025.10.23 |
| [Programmers] Lv.0 | 순서쌍의 개수 | Java (0) | 2025.10.22 |
| [Programmers] Lv.0 | 개미 군단 | Java (0) | 2025.10.22 |
댓글