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