124 나라의 숫자(Java)

bearMin·2024년 2월 29일

🎯문제

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

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

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법124 나라10진법124 나라
11614
22721
34822
411924
5121041

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

제한사항

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

입출력 예

nresult
11
22
34
411

✏️풀이

코드

class Solution {
    public String solution(int n) {
    	// 124 나라의 숫자로 변환하기 위한 배열
        String[] num = {"4", "1", "2"};
        String answer = "";
        
        while(n > 0) {
        	// 인덱스를 통해서 값을 변환
            answer = num[n % 3] + answer;
            // 숫자 n을 조정
            n = (n-1) / 3;
        }
        
        return answer;
    }
}

설명

규칙을 찾아서 해결하는 문제였다.

1, 2, 4 이렇게 총 3개의 숫자만 사용해서 10진수를 변환하는 문제인데, 값이 순서대로 나오기 때문에 3을 사용한 나머지 연산과 나눗셈 연산을 사용해보았다.

1 % 3 = 1 => 1
2 % 3 = 2 => 2
3 % 3 = 0 => 4

으로 나오기 때문에 num 배열에 들어가는 값을 4, 1, 2 순서대로 넣어주었다.

2자리 이상으로 넘어가는 숫자에 대한 처리를 고민하다가 맨 뒤의 값부터 순서대로 구해주면 된다는 것을 알았다.
맨 처음 n % 3을 해서 나온 값을 num 인덱스로 넣어주어 값을 저장하고, n을 (n-1) / 3 연산을 통해 값을 조정해준다. 이 값을 다시 n % 3을 해주고 나온 값을 이전 answer에 저장된 값 앞에 붙여준다.

예를 들어, 6의 경우 6 % 3 = 0이고 해당 값을 124 나라의 숫자로 변환할 경우 4가 된다. 이후 (6-1)/3을 계산한 값인 1을 저장하고, 다시 1 % 3에서 나온 값인 1을 num 인덱스로 사용해서 1로 변환을 한다. 그리고 이전에 저장된 값인 4 앞에 붙여주는 것이다. 그러면 14로 원하는 값이 나온다.

이처럼 위의 과정을 n이 0보다 클 때까지 반복한 뒤에 나온 answer의 값을 반환해주면 문제를 해결할 수 있다!


💡느낀 점

규칙을 생각해내는 것이 매우 어려웠다. 처음에는 모든 반복을 돌릴까 고민도 해봤지만 범위가 너무 커서 바로 포기를 했다. 숫자 3개로만 만드는 것이다보니 3을 통한 연산이 필요하다고 생각이 들었고, 나눗셈과 나머지 연산을 사용해서 문제를 해결할 수 있었다. 자료구조를 생각하는 문제들을 풀다가 규칙을 찾는 문제를 푸니 신선하고 재밌었다.


링크

문제 링크

profile
소소한 공부기록

0개의 댓글