| 문제
우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다.
입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다.
a는 0, b는 1, c는 2, ..., j는 9입니다.
예를 들어 23살은 cd, 51살은 fb로 표현합니다.
나이 age가 매개변수로 주어질 때 PROGRAMMERS-962식 나이를 return하도록 solution 함수를 완성해주세요.
| 제한 사항
- age는 자연수입니다.
- age ≤ 1,000
- PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.
| 입출력 예
| age | result |
| 23 | "cd" |
| 51 | "fb" |
| 100 | "baa" |
| 힌트
아시다시피 자바에서 순서를 나타내는 인덱스는 0부터 출발합니다.
a는 0, b는 1, c는 2, d는 3, e는 4, f는 5, g는 6, h는 7, i는 8, j는 9!!
친절하게도 a부터 배열의 인덱스 순서를 그대로 따르네요.
각 자리에 있는 숫자가 곧 알파벳을 나타내니까 나누기를 한번 도입해 보는 건 어떨까요?
| 풀이 1
주어진 숫자 age를 10으로 나눴을 때 나머지를 보면 뒷자리부터 숫자를 하나씩 가져올 수 있습니다.
만일 주어진 숫자가 23이라고 하면 10으로 나눴을때 나머지가 3 이므로 알파벳은 d여야 하죠.
그렇기 때문에 d의 인덱스가 3인 배열을 만들어주었지요.
작업이 완료되면 주어진 숫자 age를 10으로 나눠서 뒷자리를 떼줍니다.
public class Solution{
public String solution(int age) {
String answer = "";
String[] arr = new String[]{"a","b","c","d","e","f","g","h","i","j"};
while(age > 0){
answer = arr[age%10] + answer;
age /= 10;
}
return answer;
}
}
| 풀이 2
숫자 또한 문자이므로 아스키코드로 전환할 수 있다는 사실을 활용한 코드입니다.
먼저 주어진 숫자 age를 문자열로 변환하고, 이걸 다시 잘라서 문자열 배열을 만듭니다.
만들어진 문자열 배열의 데이터를 하나씩 꺼내요.
그리고 아스키코드를 활용하여 문자형태의 숫자를 알파벳으로 바꿔줍니다.
알파벳 a를 나타내는 코드가 97이고, 외계행성에서 숫자 0이 알파벳 a이기 때문에
0 + 97 => 97을 알파벳으로 바꾸면 a가 되는 거죠.
public class Solution {
public String solution(int age) {
String answer = "";
String str = Integer.toString(age);
String[] arr = str.split("");
for(String s : arr){
int num = Integer.parseInt(s)+97;
answer += (char)num;
}
return answer;
}
}
| 해설
코딩테스트 문제를 풀다 보면 아스키코드를 활용해서 문자를 숫자형태로,
숫자를 문자형태로 전환할 수 있다는 사실을 활용한 문제를 많이 만날 수 있어요.
소문자 a가 97, 대문자 A가 65라는 것 정도는 기억해 두면 크게 도움이 됩니다.
'개발 > 개발 공부' 카테고리의 다른 글
| [프로그래머스] 코딩테스트 입문 : 순서쌍의 개수 (2) | 2024.09.30 |
|---|---|
| [프로그래머스] 코딩테스트 입문 : 진료순서 정하기 (3) | 2024.09.20 |
| [프로그래머스] 코딩테스트 입문 : 배열 자르기 (0) | 2024.09.12 |
| [프로그래머스] 코딩테스트 입문 : 짝수의 합 (0) | 2024.09.10 |
| [프로그래머스] 코딩테스트 입문 : 양꼬치 (1) | 2024.09.09 |
댓글