티스토리 뷰
프로그래머스 '124 나라의 숫자'입니다.
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12899
● 문제 설명
문제 설명124 나라가 있습니다.
124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 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이하의 자연수 입니다.
● 문제 해결 방향
처음에 3진수로 생각하고 각 나머지로 숫자를 판단하는 부분만 따로 처리해주는 방법으로 진행하려 했으나
124 나라에는 0이 없어 예외 처리해주는 부분에서 규칙성을 못 찾아서
조합을 통해 해당하는 순번의 숫자를 출력해주는 방식으로 문제를 풀었습니다.
● 문제 해결 코드
from itertools import product
def solution(n):
rotate = 0
index = 0
m = 0
while n > m :
index = n - m
rotate += 1
m += 3**rotate
# print(rotate, index)
letter = ['1', '2', '4']
answer = ''.join(list(product(letter, repeat=rotate))[index - 1])
return answer
주어진 숫자를 가지고
숫자를 124나라의 진법으로 바꾸었을 때 몇 자리를 가지는 지를 계산합니다.
그리고 자리 수와 1, 2, 4를 가지고 나올 수 있는 조합을 만들어 내고,
해당하는 위치의 값을 return 해 주었습니다.
하지만 이 해결책은 정확성 측면에서는 정답이었지만
숫자가 커질 수록 조합해야 하는 숫자가 많아지고 찾는 시간도 길어져서
효율성 측면에서는 실패라는 결과가 나왔다.
다른 정답
def solution(n):
answer = ''
while n > 0:
n -= 1
answer = '124'[n%3] + answer
n //= 3
return answer
3진법 처럼 3으로 나누어 주고 그 나머지로 숫자를 판단하는 풀이를 사용했습니다.
● 알게 된 것 / 아쉬운 점
조합으로 문제를 풀긴 했지만 적절한 해법은 아니었던 것 부분이 아쉬웠습니다.
알고리즘 공부를 좀 더해서 적절한 알고리즘을 선택하는 연습을 많이 해야겠습니다.
'PYTHON' 카테고리의 다른 글
[프로그래머스/PYTHON] 체육복 (0) | 2021.11.05 |
---|---|
[프로그래머스/PYTHON] K 번째 수 (0) | 2021.10.29 |
[프로그래머스/PYTHON] 괄호 변환 (0) | 2021.09.09 |
[프로그래머스/PYTHON] 이진 변환 반복하기 (0) | 2021.09.09 |
[프로그래머스/PYTHON] 예상 대진표 (0) | 2021.09.07 |
- Total
- Today
- Yesterday
- SPA
- clean code
- 문제풀이
- GraphQL
- redux-thunk
- Vue
- bundler
- 파이썬
- Preloading
- React
- 알고리즘
- python
- v-for
- SOAP API
- programmers
- 프로그래머스
- Transpiler
- Repository Pattern
- webpack
- 백준
- TypeScript
- 상호평가
- error
- Vuex
- reactrouter
- js
- AxiosInterceptor
- Vue.js
- redux
- React.memo
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |