Just Fighting

[프로그래머스] 124 나라의 숫자 본문

Algorithm/코딩테스트 연습

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

yennle 2022. 2. 4. 21:37
728x90

https://programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

< 문제 설명 > 

숫자를 이런식으로 표현하는 나라가 있다.

주어진 숫자 n을 124 나라 식으로 바꿔서 리턴해라.

 

 

< 문제 이해 >

먼저 규칙을 찾았다.

1 -> 1

2 -> 2

3 -> 3

4 -> 3 * 1 + 1

5 -> 3 * 1 + 2

6 -> 3 * 1 + 3

7 -> 3 * 2 + 1

8 -> 3 * 2 + 2

9 -> 3 * 2 + 3

10 -> 3 * 3 + 1

11 -> 3 * 3 + 2

12 -> 3 * 3 + 3

반복되는 패턴을 찾자면 3개씩 끊어서 생각할 수 있다. 123이 계속 반복되는 구조.

그래서 2진법을 구하는 방법을 3으로 바꿔서 적용했다.

그러나 1,2,3은 3으로 나눈 나머지가 1,2,0이기 때문에 n-1을 해줘야겠다고 생각했다.

1,2,3 -> 0,1,2 => 3으로 나눈 나머지 0,1,2

4,5,6 -> 3,4,5 => 3으로 나눈 나머지 0,1,2

그리고 나온 0,1,2 대신에 1,2,4를 넣어주면 되겠다고 생각했다.

 

 

< 문제 풀이 >

n -= 1을 처음에 한번만 해주었다. 그랬더니 답이 맞질 않았다.

예시 하나를 알고리즘대로 계산해보다가 계속해서 n-1을 해줘야했다는 것을 깨달았다.

 

num = [1,2,4] 이고 , n = 7 인 경우,

(7-1) % 3 = 0, num[0] = 1, (7-1) // 3 = 2 까지 했을 때 1의자리는 맞았다.

그 뒤에는 2 % 3 = 2 였기 때문에 num[2] = 4가 되어 41의 값이 된다. 그래서 여기서도 n -= 1을 해보았다.

(2-1) % 3 = 1, num[1] = 2, (2-1) // 3 = 0,

answer = str(num[1]) + str(num[0]) =  21

값이 일치하는 것을 알 수 있었다. 

def solution(n):
    answer = ''
    num = [1,2,4]
    
    while n > 0:
        n -= 1
        answer = str(num[n%3]) + answer
        n = n // 3
             
    return answer

728x90
Comments