[Programmers] 124 나라의 숫자 - JavaScript

Joosi_Cool·2023년 3월 25일
0

Programmers

목록 보기
51/98
post-thumbnail

문제설명

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

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

예를 들어서 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

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

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

입출력 예
n result
1 1
2 2
3 4
4 11

※ 공지 - 2022년 9월 5일 제한사항이 수정되었습니다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges



설계 과정

우선 4,1,2 순의 배열을 하나 만듬 => onTwoFourArr = [4,1,2]

  • 문제 테스트 케이스를 해보면 아래와 같은 규칙이 존재한다.
    값을 3으로 나눠서 그 나머지에 대한 것 기준으로 값이 추가된다.
    0->4
    1->1
    2->2
    따라서 배열을 위와 같이 만듬.
    이후에 n 을 3으로 나눠준 몫을 또 위의 과정을 반복시킨다.
  • 단 여기서 예외가 있는데, 3으로 나눠지는 것은 n에 1을 빼줘어야 한다.
    ex) 12 -> 12 % 3 = 4 ... 0 / 4 % 3 = 1 ... 1 / 1 % 3 = 0 ... 1
    => 010 => 414? X
    12 -> 12 % 3 = 4 ... 0/ 0이기 때문에 (4-1) % 3 = 0 ... 0
    => 00 => 44 O
    반복하다가 몫이 1이고, 나머지 0인 경우 + 몫이 0 인 경우 마지막으로 나머지를 추가시킴으로써 과정을 끝낸다.


    위의 과정을 코드화 하면 아래와 같다.


정답 코드

function solution(n) {
    var oneTwoFourArr = [4,1,2];
    var answer = '';
    while(true){
        //몫이 1이고 나머지가 0인경우 break;
        if((Math.floor(n/3)===1&&n%3===0)||(Math.floor(n/3)===0)){
            answer+=oneTwoFourArr[n%3];
            break;
        }
        answer+=oneTwoFourArr[n%3];
        if(Math.floor(n%3)===0){
            n = Math.floor(n/3)-1;
        }
        else{
            n = Math.floor(n/3);
        }      
    }
    return answer.split("").reverse().join("");
}


결과



profile
집돌이 FE개발자의 노트

0개의 댓글