[프로그래머스]외계행성의 나이
외계행성의 나이
문제 설명
우주여행을 하던 머쓱이는 엔진 고장으로 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합니다.
나의 풀이 코드
import java.util.HashMap;
class Solution {
public String solution(int age) {
String str = Integer.toString(age);
HashMap<Character, String> map = new HashMap<>();
map.put('0', "a"); //""와 '' 구분해야함. ""는 String이고 ''는 캐릭터
map.put('1', "b");
map.put('2', "c");
map.put('3', "d");
map.put('4', "e");
map.put('5', "f");
map.put('6', "g");
map.put('7', "h");
map.put('8', "i");
map.put('9', "j");
StringBuilder sb = new StringBuilder();
for (int i=0; i<str.length(); i++){
sb.append(map.get(str.charAt(i)));
}
String answer = sb.toString();
return answer;
}
}
age 숫자를 문자열로 변환하고, 문자열로 변환된 각 숫자를 알파벳 문자로 매핑하는 방식으로 변환한다.
이후 map.get하여 반복하여 StringBuilder로 append한다.
hash map을 처음 써보았는데 map.put을 반복문으로 하고 싶었지만 실패했다.
배운점
import java.util.stream.Collectors;
class Solution {
public String solution(int age) {
return String.valueOf(age)
.chars()
.mapToObj(operand -> String.valueOf((char) (49 + operand)))
.collect(Collectors.joining());
}
}
남이 푼 코드를 보면 스트림을 이용한다.
마찬가지로 age를 문자열로 변환하고 문자열을 스트림으로 변환후 각 요소aperand를 아스키코드 49를 더해 숫자를 알파벳으로 바꾼다. 이후 각 매핑된 문자를 join한다.
class Solution {
public String solution(int age) {
StringBuilder sb = new StringBuilder();
while(age > 0) {
sb.insert(0, (char) ((age % 10) + (int)'a'));
age /= 10;
}
return sb.toString();
}
}
또다른 남이 푼 코드를 보면 반복문안에서 모든 작업을 한다.
하나씩 보자면, 먼저 age를 10으로 나눈 나머지 이므로 일의 자릿수를 구하고 알파벳 a의 아스키 숫자를 더한다. 즉 0이면 a가 되고 1은 b가 되는식이다.
이후, age를 10으로 나누면 일의 자릿수가 사라지고 10의 자릿수가 일의자릿수가 된다.
다시 위 방식을 반복하며 insert(0,)을 통해 각 자릿수를 변환할때마다 제일 앞에 삽입이 된다.
Leave a comment