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

김동현·2022년 8월 1일

124 나라의 숫자 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12899

문제설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  • 124 나라에는 자연수만 존재합니다.
  • 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

    예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법124 나라10진법124 나라
11614
22721
34822
411924
5121041

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

제한조건

  • n은 500,000,000이하의 자연수 입니다.

입출력 예시

lottoswin_numsresult
[44, 1, 0, 0, 31, 25][31, 10, 45, 1, 6, 19][3, 5]
[0, 0, 0, 0, 0, 0][38, 19, 20, 40, 15, 25][1, 6]
[45, 4, 35, 20, 3, 9][20, 9, 3, 45, 4, 35][1, 1]
입출력 예 설명
nresult
11
22
34
411


내 코드

class Solution {
    public static String solution(int n) {
	    String[] num = {"4", "1", "2"};
	    String answer = "";

	    while (n > 0) {
		    answer = num[n % 3] + answer;
		    n = (n - 1) / 3;
	    }

	    return answer;
    }
}
  • 일반적인 3진법이 아닌 조금 특별한(?) 3진법을 사용하는 문제이다.
  • 문제에서 예시를 보면 3의 배수가 아닌 숫자들은 전부 3진법으로 변환하여 출력한다는 것을 알 수 있다.
  • 3으로 나눠떨어지는 숫자인 3을 보면 일반적인 3진법인 10을 출력하는 것이 아니라 4를 출력한다는 것을 알 수 있다.(0을 사용하지 않는다!!)
  • 따라서 3으로 나눠 떨어지는 경우 4로 변환할 생각을 해야한다.
  • 3으로 나눈 나머지 값을 num배열에 순서대로(나머지가 0이라면 num 배열에 있는 0번째 인덱스인 4로, 나머지가 1이라면 num 배열에 1번째 인덱스인 1로) 저장을 한다.

ex)
9 % 3 = 0 -> 딱 나눠떨어짐.
나머지가 딱 나눠떨어지면 일반적인 3진법으로 변환시 0을 포함한다.(9는 3진법 변환시 100으로 0을 포함한다.)
0을 포함하면 몫인 3을 2로 낮춰주고, 나머지는 결국 3이된다.(9 = 3 * 2 + 2)
2는 더이상 3으로 나누어지지 않으므로 결과 값은 23이지만 3을 사용하지 않기 때문에 3을 4로 치환해주면 4가 된다.

알게된 점

  • 구현 자체는 쉬웠으나 이 문제를 푸는데 있어서 필요한 로직을 생각하는데 많은 시간이 걸렸다. -> 어떠한 로직을 어떻게, 어떠한 상황에서 쓰면 좋을까 생각하면서 문제풀기!! (뇌를 말랑말랑 하게!!)
profile
오늘은 오늘

0개의 댓글