오랑우탄의 반란

프로그래머스 | 3진법 뒤집기 - int(n, base) 10진법 변환 (Python3) 본문

PYTHON/프로그래머스

프로그래머스 | 3진법 뒤집기 - int(n, base) 10진법 변환 (Python3)

5&2 2024. 7. 9. 13:56
반응형

 

오늘도 오랑이는 문제를 풉니다.

 

3진법 뒤집기

 

풀이 과정

3진법이 어떻게 작동하는지부터 알아봅니다. 

 

 

 

3진법

☞ 숫자를 3을 나눴을 때의 나머지와 최종 몫을 역순으로 정렬해서 반환

예) 숫자 = 45 일 때 n(3진법) = 1200

예) 숫자 = 125일 때 n(3진법) = 11122

 

 

 

 

즉 3진법대로 숫자 n을 몫이 0이 될 때까지 3으로 나눠서 나머지를 차례대로 정렬하면 문제에서 요구한 '앞 뒤 반전 3진법' 결과물이 이미 나오는 걸 볼 수 있습니다. 

 

밑줄 친 부분에 대해서 while 반복문으로 코드를 작성하면 아래와 같습니다. 결과물을 저장해둘 변수 설정도 잊지 맙시다. 

이때 주의해야 할 점은 answer += str(r) 처럼 r 를 문자열로 변환해줘야 answer 에 적재가 된다는 점입니다. 

answer = r 로만 적을 시 TypeError: can only concatenate str (not "int") to str 오류가 뜹니다.

answer = ''
while n != 0:
	r = n % 3
    n = n // 3
    answer += str(r)

 

그러면 해당 결과값을 10진법으로 어떻게 변환할까요? 

파이썬 int() 함수로 진수를 변환할 수 있다는 놀라운 사실!

바로 알아봅시다. 

 

Python 진수 변환

n진수 → 10진수 

    주의) 결과값은 string 으로 반환 

int(n, base)

 

 

string 에 변환하고자 하는 값을, base 에 해당 값의 진법을 넣으면 됩니다. 

우리는 int(answer, 3) 으로 코드를 작성하면 됩니다. 

 

반대로 10진수를 2, 8, 16 진수로 변환하는 것은 각각의 함수가 지원됩니다.

bin(n)[2:] 
oct(n)[2:]
hex(n)[2:]

 

해당 함수에 대한 출력값엔 각각 0b, 0o, 0x 가 붙는데 이는 각 진수에 대한 진법 표시이므로, 해당 표시를 지우려면 출력값에 [2:]를 붙여주면 됩니다. 

 

최종 코드

def solution(n):
    answer = ''
    while n != 0:
        r = n % 3 
        n = n//3 
        answer += str(r)
    return int(answer, 3)

 

 

오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

반응형