프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 외계행성의 나이(Java)

Sigfriede 2023. 4. 10. 20:55

  문제 설명

  우주여행을 하던 머쓱이는 엔진 고장으로 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"
import java.util.HashMap;
import java.lang.StringBuilder;
class Solution {
    public String solution(int age) {
        String answer = "";
        HashMap<Integer, String> map = new HashMap<>();
        map.put(0, "a");
        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();
        while (age > 0) {
            int digit = age % 10;
            age /= 10;
            sb.append(map.get(digit));
        }
        
        answer = sb.reverse().toString();
        return answer;
    }
}

  HashMap을 생성합니다. put 메소드를 사용하여 여기에 각각 해당하는 숫자와 문자, 즉 key와 value의 데이터를 넣어줍니다. StringBuilder의 메소드를 사용하기 위하여 sb 변수를 마찬가지로 생성해줍니다.

  while문은 age가 0보다 큰 동안 반복합니다. age를 10으로 나눈 값을 받는 변수 digit를 생성합니다. 나누기 연산을 통해 자릿수를 구해줍니다. 구한 자릿수는 map에서 value를 꺼내오는 데에 쓸 것입니다. 꺼내온 value를 append 메소드로 sb에 값을 넣어줍니다.

  while문으로 자릿수를 구할 경우, 일의 자리부터 계산합니다. 따라서 현재 sb에 입력되는 값은 원하는 값과 정확히 반대인 셈입니다. 따라서 reverse() 메소드로 문자열을 뒤집어준 뒤, 최종 문자열을 반환하는 toString() 메소드를 사용합니다.