문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
45 | 7 |
125 | 229 |
내 풀이
10진법를 3진법로 바꾸기 위해서는 주어진 n 값을 3으로 나누고 나온 나머지를 역순으로 저장해야함
ex)n=45를 3으로 나눈 나머지는 0 -> 0 -> 2 -> 1
역순으로 저장하기 위해 나눈 나머지을 바로 문자열 a에 입력
rest 변수는 45의 3진법인 1200의 역순 0021을 갖게 됨
10진법 계산을 인덱스 0번 부터 하기 위해 a 문자열을 뒤집음 -> 1200
def solution(n):
a = ""
while n >= 1:
n, rest = divmod(n,3)
a += str(rest)
a = a[::-1]
return sum([int(a[i])*(3**i) for i in range(len(a))])
다른 사람 풀이
n을 3 으로 나눈 나머지를 tmp 문자열에 바로 저장
(n의 3진법의 역순을 갖게 됨)
파이썬에서 지원하는 int(string, base) 를 통해 3진법을 10진법으로 변환
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
728x90
'코딩테스트' 카테고리의 다른 글
[프로그래머스/파이썬] [1차]비밀지도 (0) | 2022.09.30 |
---|---|
[프로그래머스/파이썬] 시저 암호 (0) | 2022.09.29 |
[프로그래머스/파이썬] 예산 (0) | 2022.09.28 |
[프로그래머스/파이썬] 이상한 문자 만들기 (0) | 2022.09.27 |
[프로그래머스/파이썬] 같은 숫자는 없어 (0) | 2022.09.25 |