공부하자!/알고리즘

프로그래머스 124 나라의 숫자 - 파이썬

지우개원정대 2022. 6. 12. 21:26

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

 

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

 

programmers.co.kr

 

문제

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

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

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

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

 

제한사항

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

풀이

단순히 3진법을 사용해서 풀이하면 된다고 생각했는데 그게 아니었다.

보통의 3진법에서 3의 배수는 맨 뒤 숫자가 0이 되는데, 124 나라에서는 4여야 한다는 점..!!

 

  1. 우선 보통의 n진법을 만드는 것처럼, n이 0이 되기 전까지 3으로 나누어주고 (while문 사용)
  2. 3으로 나눈 나머지를 answer에 더해준다. (-> return값은 answer를 뒤집어준다.)
  3. 단, 3의 배수일 경우 0이 아닌 4를 answer에 더해주고, 몫에서 1을 뺀 값을 다시 n에 대입한다.
1을 빼주는 이유:
예를 들어 6을 124나라의 표현법으로 표현할 경우, 14이다.
보통의 3진법이라면 (3*2) + (1*0)으로 표현되었겠지만 여기서는 (3*1) + (1*3)으로 표현되어야 하기 때문에
뒤에 0이 아닌 4를 넣어주고 윗 자리수에 들어갈 부분에 1을 빼주어야 하는 것이다.

 

3의 배수를 따로 if로 나누어 구분한 후 3의 배수는 3으로 나눈 몫에서 1을 빼주고 진행해주어야 한다.

def solution(n):
    answer = ''
    
    while n > 0 :
        if int(n % 3) == 0:
            answer += "4"
            n = n // 3 - 1
        else :
            answer += str(n % 3)
            n = n // 3
    
    return answer[::-1]

 

ㅠㅠㅠㅠ 조금만 더 규칙을 찾아보려고 노력했으면 혼자 힘으로 풀 수 있었을까..?

코테 준비 한참 안하다가 다시 하려니 좀 무서워진다.

그래도 해봐야지

다음에는 꼭 규칙을 찾아보려고 해보자