🔗 외게행성의 나이
문제 설명
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.
제한사항
- age는 자연수입니다.
- age ≤ 1,000
- PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.
입출력 예
| age | result |
| 23 | "cd" |
| 51 | "fb" |
| 100 | "baa" |
입출력 예 설명
입출력 예 #1
- age가 23이므로 "cd"를 return합니다.
입출력 예 #2
- age가 51이므로 "fb"를 return합니다.
입출력 예 #3
- age가 100이므로 "baa"를 return합니다.
문제풀이
👉🏻 내 코드
class Solution {
public String solution(int age) {
String answer = "";
String str = String.valueOf(age); //숫자를 문자열로
for (int i = 0; i < str.length(); i++) { //str 순회
int num = str.charAt(i) - '0'; //문자를 정수로 변환 예) 문자 '0'~'9' -> 정수 0~9
char ch = (char) ('a' + num); //숫자를 알파벳으로 변환 예) 정수 0~9 -> 문자 'a'~j'
answer += ch; //문자 이어붙이기
}
return answer;
}
}
✔️ 정수 age -> 문자열 변환 -> 각 자리수를 알파벳으로 치환 -> 합쳐서 반환
for문 돌기 전에 숫자를 문자열로 변환했기 때문에 str.charAt(i) 그대로 문자를 쓰면 '3' 이라는 문자의 코드값(아스키코드)를 다루게 된다. '3'의 유니코드 -> 51
내가 써야할 건 문자 '3'이 아닌 숫자 3이라는 값. 그래야 아스키코드 사용 가능.
그렇기 때문에 -'0' 을 이용해 숫자로 바꿔야 뒤에서 알파벳으로 매핑할 수 있다.
-'0' 하는 이유는 문자를 정수로 변한하기 위함인데 자세한 설명은 여기
char ch = (char) ('a' + num);
숫자를 문자로 변환한다.
'a'는 아스키 코드값 97. 'a'+num을 하면 97 + num이라는 정수 덧셈이 된다. 예로 num이 2라면 97+2 = 99
그런데 이 결과는 정수이기 때문에 문자로 캐스팅이 필요하기 때문에 앞에 (char)를 써서 형변환 해준다. 99 아스키코드는 'c'
👉🏻 다른 사람 코드
class Solution {
public String solution(int age) {
String answer = "";
String[] alpha = new String[]{"a","b","c","d","e","f","g","h","i","j"};
while(age>0){
answer = alpha[age % 10] + answer;
age /= 10;
}
return answer;
}
}
class Solution {
public String solution(int age) {
String answer = "";
// age가 0이 될 때까지 한 자리씩 꺼내기
while (age > 0) {
int digit = age % 10; // 마지막 자리 숫자
char ch = (char) ('a' + digit); // 알파벳 변환
answer = ch + answer; // 앞에 붙여서 순서 맞추기
age /= 10; // 마지막 자리 제거
}
return answer;
}
}
class Solution {
public String solution(int age) {
// 숫자를 문자열로 바꾼 다음, split으로 한 글자씩 나눔
String[] digits = String.valueOf(age).split("");
// 결과 담을 변수
String answer = "";
// 각 숫자를 알파벳으로 변환
for (String d : digits) {
int digit = Integer.parseInt(d); // 문자열 -> 정수
char ch = (char) ('a' + digit); // 숫자 -> 알파벳
answer += ch; // 결과 문자열에 이어붙이기
}
/* for (int i = 0; i < digits.length; i++) {
String d = digits[i]; // i번째 요소 꺼내오기
int digit = Integer.parseInt(d); // 문자열 -> 정수
char ch = (char) ('a' + digit); // 숫자 -> 알파벳
answer += ch; // 결과에 이어붙이기
} */
return answer;
}
}
'코테 > 프로그래머스 JAVA Lv.0' 카테고리의 다른 글
| [프로그래머스/java] 배열 회전시키기 (0) | 2025.08.27 |
|---|---|
| [프로그래머스/java] 합성수 찾기 (0) | 2025.08.25 |
| [프로그래머스/java] 콜라츠 수열 만들기 (0) | 2025.07.17 |
| [프로그래머스/java/Lv.0] 접미사 배열 (0) | 2025.06.01 |
| [프로그래머스/java/Lv.0] 369게임 (0) | 2025.05.27 |