Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 하나은행
- 하나은행 인턴 후기
- 아이패드 논문 필기
- 파이썬
- 아이패드 noteshelf
- 하나은행 인턴
- 아이패드 논문
- 주석 단축키
- Python
- 2022 하나은행 인턴 후기
- Noteshelf
- pytorch
- TensorFlow
- pytorch로 시작하는 딥러닝
- 아이패드 필기
- GPU
- liquid text
- windows10
- 필기 어플
- 노트쉘프
- deep learning
- 리퀴드텍스트
- 하나은행 공채
- 아이패드 필기어플
- 논문 필기
- 딥러닝
- 굿노트
- 프로그래머스
- 아이패드 노트쉘프
- 아이패드
Archives
- Today
- Total
Azure Zest
[ Level 2 ] 124 나라의 숫자 - 파이썬 본문
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
10진법을 124 나라 숫자로 바꾸면 1,2,4를 차례로 점점 product 하는 규칙임을 알 수 있다.
예를들어 1,2,3은 각각 repeat=1로 한 product이고,
3부터는 repeat=2로 한 product 연산 결과이다.
따라서, 3**1 + 3**2 + ... 으로 숫자가 점점 많아지므로 주어지는 숫자 n을 124 나라 숫자로 바꾸려면 우선 repeat이 몇번째에 해당하는지를 알아야한다.
이를 바탕으로 구현해보면 다음과 같다.
from itertools import product
def solution(n):
answer = ''
s = ('1','2','4')
i, tmp = 1, 0
while True:
tmp += 3**i
if tmp >= n:
break
i += 1
tmp1 = n - tmp
answer = list(product(s, repeat = i))
return ''.join(answer[tmp1-1])
하지만, 이 코드는 정확성은 다 맞지만 효율성 테스트에서 시간 초과로 점수를 받지 못했다.
다음 블로그를 확인했을 때, 다른 방법이 있다는 것을 확인했고 이런 생각을 하는 것에 놀라웠다,,
더 연습해서 이런 아이디어를 잘 낼 수 있도록 노력해야겠다.
위의 블로그에 나와있는 소스코드는 아래와 같다.
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]
Reference
'프로그래머스 풀이' 카테고리의 다른 글
[ Level 2 ] 오픈채팅방 - 파이썬 (0) | 2022.06.30 |
---|---|
[ Level 1 ]최소직사각형 - 파이썬 (0) | 2022.06.30 |
[ Level 1 ] 부족한 금액 계산하기 - 파이썬 (0) | 2022.06.30 |
[ Level 2 ] 모음사전 - 파이썬 (0) | 2022.06.30 |
[ Level 2 ] 멀쩡한 사각형 - 파이썬 (0) | 2022.06.29 |