[prgrms] 124 나라의 숫자

Mayton·2022년 12월 23일
0

Coding-Test

목록 보기
31/37
post-thumbnail

124 나라의 숫자

level2, 구현문제
문제 링크

문제

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

124 나라에는 자연수만 존재합니다.
124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

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

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

제한사항

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

나의 첫 생각

문제를 읽는 순간 3진법이 딱 떠올랐고, 3진법을 이용해서 풀기 위해 n.String(3) 이후에 어떻게 해야할지를 계속 고민을 했다. 추가적으로 n이 50_000_000이하 이기때문에 1부터 n까지 124나라에서의 길이를 구한후 조합으로 풀 수 있을까를 고민했지만 n의 크기로 인해 n까지의 for 문과 조합까지 하게되면 O(n3)이상이 예상되었다.

이 문제에서 3진법과 다른 하나는 0을 쓸 수 없다는 것이다. 우리가 진법을 계산할 때 3으로 계속 나눠주면서 나머지를 계산하게 되는데 이 방법을 조금 변형해서 문제를 풀 수 있었다. 3으로 나누어 떨어지면 0을 써주고, 1을 다음 자리수로 올려주지만 124나라에서는 4를 써준 대신에, 다음 수에서 다음 자리수에 1과 이번 자리수 1을 둘 다 올려주게 된다.

문제 풀이

3으로 나눈 나머지를 기준으로 answer를 계산한다.

만약 나머지가 1이라면 4를, 1이 아니라면 나머지를 그대로 answer에 한글자 추가한다.

그리고 몫이 0이 될때까지 3으로 계속 나눠주면 몫이 0일때의 answer이 정답이 된다.

function solution(n) {
    let remainder=-1;
    let share=n;
    let answer=""
    if(share<3)return share+""
    while(share!==0){
        
        remainder=share%3;
        share=Math.floor(share/3);
        
        if(remainder===0){
            answer="4"+answer;
            share-=1;
        }else {
            answer=remainder+answer;
        }
        
    }
    return answer
}
profile
개발 취준생

0개의 댓글