[pro] 3진법 뒤집기

letsbebrave·2022년 3월 21일
0

codingtest

목록 보기
59/146
post-thumbnail

문제링크

https://programmers.co.kr/learn/courses/30/lessons/68935

개념

진법으로 변환

while n > 0:으로 맨 위의 조건식을 해주어야 무한루프할 때 시간초과에 빠지지 않을 수 있음

n진수 -> 10진수

결과값은 모두 string!

int(string, 원하는 진법))

print(int('101',2)) # 2진수 -> 10진수로 변환됨
print(int('202',3)) # 3진수 -> 10진수로 변환됨
print(int('303',4)) # 4진수 -> 10진수로 변환됨
print(int('404',5)) # 5진수 -> 10진수로 변환됨
print(int('505',6)) # 6진수 -> 10진수로 변환됨
print(int('ACF',16)) # 16진수 -> 10진수로 변환됨

풀이

def solution(n):
    m = 0 # 몫
    s = 0 # 나머지
    t = [] # 3진법 저장
    
    while n > 0: # 이걸 처음에 무한루프로 걸어줘서 시간초과 됨
        m = n // 3
        s = n % 3
        t.append(s)
        n = n // 3 #  업데이트 중요
        
        if m == 1:
            t.append(m)
            break

    answer = 0       
    for i in range(len(t)):
        answer += (3 ** (len(t)-1-i)) * t[i]
    
    return answer

다른 풀이

def solution(n):
    tmp = '' # int(str, 3) 쓰려면 ''문자열이어야
    while n:
        tmp += str(n % 3) # 문자열에 계속 더해줌 +=
        n = n // 3

    answer = int(tmp, 3) # 3진수 -> 10진수로 변환
    return answer

Ref.

https://velog.io/@code_angler/파이썬-진수변환2진법-3진법-5진법-10진법n진법

profile
그게, 할 수 있다고 믿어야 해

0개의 댓글