Algorithm

[프로그래머스] 124 나라의 숫자 Java

소스코드는 Github에서도 확인하실 수 있습니다.

[프로그래머스] 124 나라의 숫자

풀이

10진법 124나라 10진법 124나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

규칙을 찾으면 다음과 같다.
주어진 10진법 수를 n이라고 하면, n을 3으로 나눈 나머지 값에 따라 각각 "4", "1", "2"로 나타내어진다.

124 숫자에서 나타낼 수 있는 수는 1,2,4만 존재하며, 나머지가 0일 때엔 "4"로, 1일 때엔 "1"로, 2일 때엔 "2"로 나타낼 수 있다. 인덱스에 맞게 배치하면 다음과 같다. Strings = {"4", "1", "2"} if n이 2인 경우: n % 3 = 2 이므로, 2는 Strings[2]인 "2"로 나타낼 수 있다.


그렇다면 자릿수가 2 이상인 경우에는 어떻게 될까?
먼저 n % 3을 수행한 뒤, 그 몫을 다시 n % 3한 결과를 앞에 더해주면 된다.

Strings = {"4", "1", "2"} answer = "" if n == 5인 경우: n % 3 = 2 이므로, answer에는 "2"가 들어간다. n / 3 = 1 이므로, n = 1이 된다. n % 3 = 1 이므로, answer에는 기존의 "2"에, 1에 해당하는 "1"이 앞에 더해지므로 "12"가 된다.


코드로 나타내면 다음과 같다.

import java.util.*; class Solution { private static final List<String> BASE_NUMBER = Arrays.asList("4", "1", "2"); public String solution(int n) { List<String> answers = new ArrayList<>(); while (n != 0) { answers.add(0, divide(n)); n = (n-1) / 3; } return String.join("",answers); } private String divide(int n) { return BASE_NUMBER.get(n%3); } }


근데 자바로는 코딩 테스트를 처음 풀어보다보니, 다른 블로그들과 내 풀이가 좀 많이 다르다는 것을 알았다.
다른 블로그들은 주로 배열을 사용하고 함수를 나누지 않던데, 알고리즘을 위한 자바 풀이를 공부해보아야겠다.