[백준_Python] 1316번: 진법 전환2

Jason·2023년 8월 3일
post-thumbnail

1. 문제

2. 해석


10진수를 N진수로 변환하는 가장 직관적인 방법은 10진수를 N으로 직접 나눠보는 것이다.

몫이 0일 될 때까지 나누고 나머지는 기록한 뒤 나머지의 역순으로 숫자를 나열해보면 N진수의 수가 된다.

3. 풀이

1) 개인

def solution(number, base):
    # 빈 str 객체를 만들어준다
    reversed_base_num = ''
	
    # 10진수의 몫이 0이 되기 전까지 계속 반복한다.
    while number > 0:
        # 나눗셈 결과에 몫을 기존 10진수 변수인 number에 업데이트해준다.
        number, r = divmod(number, base)
        # 나머지가 9보다 큰 경우는 알파벳으로 변형해주어야 한다. 아스키 코드 변환 함수를 사용했다.
        if r > 9:
            r = chr(55+r)
        # 업데이트되는 나머지를 만들어준 str 객체에 넣어준다.
        reversed_base += str(r)
        # 나머지 모음을 뒤집어서 결과를 반환해준다.
    return reversed_base_num[::-1] 

N, B = map(int, input().split())

print(solution(N, B))  

2) 참고

# annotation을 활용해 매개변수의 자료형태를 정해주었다.
def base_conversion(x: int, r: int) -> str:
    reversed_base_num = ""
    # 아스키 코드 변환 함수를 사용하지 않고 직접 숫자와 문자를 변수로 지정해주었다. 
    dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    while x > 0:
        # 나머지는 str 객체에 더해주고
        reversed_base_num += dchar[x%r]
        # 기존 인자로 받아준 수는 몫으로 업데이트 해주었다.
        x //= r
	# 앞선 코드와 마찬가지로 순서를 뒤집어 주었다.
    return d[::-1]

을 보면서 더 짧은 코드를 추가해보았다.

4. 배운점

1) divmod()

  • 몫과 나머지를 동시에 반환 받을 수 있다. 가독성을 높이는데 도움을 준다.

2) [::-1]

  • 인덱스 슬라이싱을 통해서 문자열의 순서를 바꿔줄 수 있다.
  • 굳이 함수를 하나 더 만들어서 문자열 순서를 바꿔줄 필요가 없다.
profile
개발과 데이터에 관심이 많은 서버 개발자

0개의 댓글