오랑우탄의 반란
프로그래머스 | 3진법 뒤집기 - int(n, base) 10진법 변환 (Python3) 본문
오늘도 오랑이는 문제를 풉니다.
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)
오랑우탄이 영어를 하고 오랑이가 코드마스터가 되는 그날까지~
'PYTHON > 프로그래머스' 카테고리의 다른 글
프로그래머스 | 시저 암호 (Python3) 리스트, ORD, CHR (2) | 2024.07.11 |
---|---|
프로그래머스 | 최소직사각형 (Python3) (0) | 2024.07.11 |
프로그래머스 | 삼총사 (Python3) (0) | 2024.07.10 |
프로그래머스 | 이상한 문자 만들기 (Python3) (1) | 2024.07.09 |
프로그래머스 | 최대공약수와 최소공배수 (Python3) (0) | 2024.07.08 |