공부하자!/알고리즘
프로그래머스 124 나라의 숫자 - 파이썬
지우개원정대
2022. 6. 12. 21:26
https://programmers.co.kr/learn/courses/30/lessons/12899
문제
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
풀이
단순히 3진법을 사용해서 풀이하면 된다고 생각했는데 그게 아니었다.
보통의 3진법에서 3의 배수는 맨 뒤 숫자가 0이 되는데, 124 나라에서는 4여야 한다는 점..!!
- 우선 보통의 n진법을 만드는 것처럼, n이 0이 되기 전까지 3으로 나누어주고 (while문 사용)
- 3으로 나눈 나머지를 answer에 더해준다. (-> return값은 answer를 뒤집어준다.)
- 단, 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]
ㅠㅠㅠㅠ 조금만 더 규칙을 찾아보려고 노력했으면 혼자 힘으로 풀 수 있었을까..?
코테 준비 한참 안하다가 다시 하려니 좀 무서워진다.
그래도 해봐야지
다음에는 꼭 규칙을 찾아보려고 해보자