프로그래머스 월간 코드 챌린지 시즌 1
- Lv 1. 3진법 뒤집기 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/68935
def solution(n):
answer = 0
# 3진법으로 변형하기
samzinbup = []
while (n > 0):
div = n // 3 # 3으로 나눈 몫
left = n % 3 # 3으로 나눈 나머지
samzinbup.append(left) # 나머지를 넣어주고
n = div # 몫을 3으로 다시 나누기위해 갱신
# print(samzinbup)
# 뒤집기
sam_n = []
for i in range(len(samzinbup) - 1, -1, -1):
sam_n.append(samzinbup[i])
# print(sam_n)
# 10진법으로 계산하기
for i in range(len(sam_n)):
answer += sam_n[i] * (3 ** i)
return answer
if __name__ == '__main__':
print(solution(45))
print(solution(125))
print(solution(1))
def solution(n):
answer = 0
# 3진법으로 변형하기
samzinbup = []
while (n >= 3):
div = n // 3 # 3으로 나눈 몫
left = n % 3 # 3으로 나눈 나머지
samzinbup.append(left) # 나머지를 넣어주고
n = div # 몫을 3으로 다시 나누기위해 갱신
if (div < 3):
samzinbup.append(div)
...
→ 이전 코드에서는 3으로 나눌때까지 나누는게 아니라n > 0
으로 바꿔주고 해당 if문을 없애니 통과하게 되었다.int(string, n)
: 해당 string을 n에 넣은 진수에서 10진수로 변환해준다. 즉, n진법으로 변환이 가능하다.
참고 : https://velog.io/@code_angler/파이썬-진수변환2진법-3진법-5진법-10진법n진법
print(int('101',2))
print(int('202',3))
print(int('303',4))
print(int('404',5))
print(int('505',6))
print(int('ACF',16))
>> 20
>> 51
>> 104
>> 185
>> 2767