반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12899
풀이
처음엔 문제를 보고 좀 당황했었는데 3진법에서 한번 더 생각해보면 되는 문제였다.
124 나라의 특징은
- 1, 2, 4로만 숫자가 구성되어있다.
- 4부터 자릿수가 늘어난다.
- 7에서 앞자리 수가 바뀐다.
- 10에서 앞자리 수가 2 커진다.
위 특징으로 규칙을 찾아보면 다음과 같은 규칙을 발견할 수 있다.
3으로 나눠지는 경우와 3으로 나눠지지 않는 경우, 두 가지 경우를 따져줘야 한다.
1. 3으로 나눠지지 않는 경우
- 3진법과 비슷하다.
- 3진법은 0,1,2로 표현되는데 3으로 나누어 떨어지지 않는다는 것은 1의 자리에는 1, 2만 올 수 있기 때문 에 124 나라에서도 표현 가능한 숫자들이다.
2. 3으로 나누어지는 경우
- 3진법에서 3으로 나누어 떨어지는 수는 일의 자리가 0이 된다. 124 나라에서는 이 일의 자리 수를 4로 바 꿔준다.
- 3으로 나눈 몫에서 1을 뺀 값이 10의 자리 수 이상이다.
+ 숫자를 변환하는 방법은 2진법, 8진법과 같이 다른 집법으로 바꾸는 방법과 같다.
정답
def solution(n):
answer = ''
while n:
if n % 3:
answer += str(n % 3)
n //= 3
else:
answer += "4"
n = n//3 - 1
return answer[::-1]
n이 3의 배수가 아니라면 3진법을 구하는 방법과 동일하게 3으로 나눈 나머지를 저장하고, n을 3으로 나눈 몫으로 저장한다.
n의 3의 배수라면 무조건 4를 추가하고, n을 3으로 나눈 몫에서 1을 뺀 값을 저장한다.
반응형
'Python 코딩테스트' 카테고리의 다른 글
[프로그래머스] 더 맵게 (0) | 2022.09.09 |
---|---|
그리디: 백준 1783 병든 나이트 파이썬 (0) | 2022.09.07 |
[프로그래머스] 오픈채팅방 (0) | 2022.09.03 |
[프로그래머스] 문자열 압축 (0) | 2022.09.01 |
백준 17452 약수의합 파이썬(python) (0) | 2022.01.17 |