세조목

Python 예제(3진법 뒤집기) 본문

데이터 분석 공부/Python

Python 예제(3진법 뒤집기)

세조목 2024. 2. 26. 12:28

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

 

프로그래머스

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

programmers.co.kr

진법 뒤집기 문제입니다.

10진법인 수를 3진법으로 바꾸고,

이를 다시 10진법으로 바꿔줘야합니다.

 

n진법을 10진법으로 만드는건 int함수를 써서 쉽게 할 수 있지만

10진법을 3진법으로 만들기 위해서는 별도의 함수를 만들어야합니다.

 

3진법을 만드는 방법은 아래 이미지와같습니다.

출처 : https://gupu.tistory.com/50

 

진법을 바꾸고자하는 숫자를 n진법 n으로 나눠주면서

가장 마지막 나머지부터 순서대로 나열하면 그 수가 바로 변경된 진법의 수입니다.

위 예시에서의 경우 10진수인 45를 3진수로 변환하는 과정인데

몫이 0이 나올때가지 숫자 45를 3으로 계속해서 나눠주며

가장 마지막에 나오는 나머지 1부터 순서대로 나열한 1200이 3진수 값이 됩니다.

이를 파이썬 코드로 작성하면 아래와 같습니다.

def solution(n):
	answer = ''
	while n > 0:
    	quo, remain = divmode(n)
        answer+=str(remain)

while문을 활용해서

n이 0보다 작거나 같아지지 않는다면

계속해서 n의 몫과 나머지를 구하고

나머지는 변수 answer에 더해줍니다.

 

여기서 divmode란 변수의 몫과 나머지를 한번에 구할 수 있는 내장함수입니다.

 

위 코드의 결과값은 0021로

이를 다시 10진법으로 바꾸기위해 int함수를 써주면

숫자 7이 출력됩니다.

def solution(n):
    answer = ' '
    while n > 0:
        n, re = divmod(n,3)
        answer += str(re)
    return int(answer, 3)

int함수를 가지고서 n진법을 10진법으로 바꿀때

두 번째 인자에는 기존의 수가 몇 진법인지를 나타내는 수를 넣어주면 됩니다.

2진법이면 2

3진법이면 3

16진법이면 16

이렇게 말이죠.