반응형
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 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 |
문제 풀이 -첫번째 시도 (오답)
1씩 커지는거 2 5 8 ...
2씩 커지는거 3 6 9 ...
7씩 커지는거 4 7 ...
17씩 커지는거 10 20 ...
라고 생각하고 for문을 이용해서 풀었습니다.
def solution(n):
pre = 1
a =2
b= 3
c= 4
d=10
for i in range(1,n+1):
if i == a :
pre += 1
a+=3
elif i==b :
pre += 2
b+=3
elif i==c :
if i==d:
pre += 17
d +=10
else:
pre += 7
c+=3
return str(pre)
solution(10)
애초에 접근을 잘못한 걸 힌트를 보고 깨달았습니다.
3으로 나눠서 풀어야 하는 것을 알았습니다.
문제 풀이 - 두번째 시도(통과)
3으로 나눴을 때 나머지 만약 3의 배수면 4를 추가하고 나눠주면 됩니다.
def solution(n):
rev_base = ''
while n :
if n%3 :
print(n%3)
n,mod =divmod(n,3)
rev_base += str(mod)
else:
rev_base+="4"
n = n//3-1
print(rev_base[::-1])
return rev_base[::-1]
solution(4)
다른 사람 문제 풀이
def change124(n):
num = ['1','2','4']
answer = ""
while n > 0:
n -= 1
answer = num[n % 3] + answer
n //= 3
return answer
1,2,4만 존재하기 때문에 먼저 선언하고 1,2,4 리스트에 인덱스에 %를 이용해 answer 변수에 계속 추가하는 것으로 보입니다.
세상에 천재는 많다..
'프로그래머스 > lv2' 카테고리의 다른 글
[118667] 두 큐 합 같게 만들기 python3 (0) | 2022.09.01 |
---|---|
[42888] 오픈채팅방 python3 (0) | 2022.08.29 |
[60057] 문자열 압축 python3 (0) | 2022.08.28 |
[42626] 더 맵게 python3 (0) | 2022.08.27 |
[12909] 올바른 괄호 python3 (0) | 2022.08.26 |