반응형
파이썬으로 프로그래머스 풀기 :: 124 나라의 숫자
문제 설명
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 |
https://programmers.co.kr/learn/courses/30/lessons/12899
코드1
1 2 3 4 5 6 7 8 9 10 11 | def solution(n): result = [] i = 0 while n > 0: d = 3 ** i while (n - d) % 3 ** (i + 1) != 0: d += 3 ** i result.append(d // 3 ** i) n = n - d; i += 1 return "".join(map(str,[4 if i==3 else i for i in result][::-1])) | cs |
0, 1, 2 삼진법이 아닌, 1, 2, 3 삼진법으로 풀었다. (후에 3만 4로 바꿔주었다.)
0이 없기 때문에 1의자리부터 무조건 1이상 채워야 한다.
(n=10일 때,
일반적인 3진법이라면 101(= 3^2*1 + 3^1*0 + 3^0*1) 이지만,
이 경우에는 31(= 3^1*3 + 3^0*1))
때문에 1의자리 숫자(3^0) 부터 구했다.
코드2 :: 다른 사람람의 풀이
1 2 3 4 5 6 | def solution(n): if n<=3: return '124'[n-1] else: q, r = divmod(n-1, 3) return solution(q) + '124'[r] | cs |
* 삼진법에 0이 포함되지 않기때문에 divmod(n, 3)이 아니라 divmod(n-1, 3)
* divmod(a, b)
a를 b로 나누었을 때 몫과 나머지를 tuple의 형태로 return
> divmod(9, 3)
(3, 0)
> divmod(10, 3)
(3, 1)
반응형
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 in python (2) | 2019.12.09 |
---|---|
[프로그래머스] 카펫 in python (5) | 2019.12.08 |
[프로그래머스] 2 x n 타일링 in python 파이썬 (0) | 2019.12.06 |
[프로그래머스] 종이접기 (0) | 2019.12.05 |
[프로그래머스] 주식가격 in python (0) | 2019.12.04 |