[프로그래머스] (LV2) 124 나라의 숫자

[프로그래머스] (LV2) 124 나라의 숫자

124 나라의 숫자

JavaScript, Python

문제 설명

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은 500,000,000이하의 자연수 입니다.

입출력 예

n result
1 1
2 2
3 4
4 11


풀이


javascript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function solution(n) {
var answer = '';

function three(num,count){

if(num === 0)
return 0
else{
var cal = Math.floor(num /3);
var rest = num % 3;

if( rest === 0 ){
cal--;
rest = 4;
}

return three(cal,count+1) + rest * Math.pow(10,count)
}
}

answer = three(n,0)
return answer+'';
}


python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def solution(n):
answer = 0
count = 0

while n > 0:

n, r = divmod(n, 3)

if r == 0:
n -= 1;
r = 4;

answer += (r * (10 ** count))
count += 1;

return str(answer)


설명


진법 변환을 요구하는 문제다.

언뜻 보면 단순히 4진법에서 (3 -> 4)만 변한듯 오해할 수 있으나 124나라 표기법에는 0이 없다는 점을 잊어선 안된다.


10진법 3진법 124나라
1 1 1
2 2 2
3 10 4
4 11 11
5 12 12
6 20 14
7 21 21
8 22 22
9 100 24
10 101 41


3진법과 124나라의 진법을 자세히 살펴보면 핵심은 4에 있다는 것을 알 수 있다.

124나라의 4는 자리 변환이 일어나는 3진법의 10의 성질을 갖고 있다.

따라서 3을 나누어 몫과 나머지를 반복하는 3진법 계산식에서 나머지가 0일때 4의 특성을 입혔다. (몫 -1, 나머지 <- 4)

이 방법을 통해 문제를 해결할 수 있었고, 다른 사람들의 풀이도 이와 비슷한 양상을 보였다.


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


[프로그래머스] (LV2) 124 나라의 숫자

https://sklubmk.github.io/2021/06/30/4eb67bcb6e9d/

Author

Jinki Kim

Posted on

2021-06-30

Updated on

2021-08-05

Licensed under

댓글