본문 바로가기

programming/algorithm

[algorithm] 백준 11005 - 진법 변환 2

[algorithm] 백준 11005 - 진법 변환 2

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 백준 11005번 문제 - 진법 변환 2 에 대한 풀이를 살펴보도록 하겠습니다.

 

풀이에 사용한 언어는 Python3 입니다.

 

문제 해석과 풀이 다 함께 살펴보시죠.

 

algorithm
알고리즘


백준 BAEKJOON 11005

 

https://www.acmicpc.net/problem/11005

 

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

반응형

 

문제 해석

 

우리가 저번에 살펴본 문제 중에 10진수인 수를 X진수로 바꿔서 출력해줘야하는 문제가 있었습니다.

문제 해석 아래에 링크를 걸어두었으니 풀이 확인이 필요하실 경우 참고하시기바랍니다.

백준 2745번 진법 변환 문제를 풀 때 우리는 실제로 10진법으로 바꿔주는 방식을 그대로 구현하거나

파이썬 내장함수 int()를 활용해 문제를 해결했습니다.

이번에도 int()를 사용해서 해결이 가능할까요? 아니면 다른 방법을 사용해야할까요?

우선 시도를 해보고 풀이에 대한 설명을 같이 보시죠.

 

관련 문제 풀이 글 링크  ->  [algorithm] 백준 2745 - 진법 변환

 

풀이

 

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

num = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
result =''

while True:
    x, y = divmod(N, B)
    result = num[y] + result
    if x == 0:
        break
    N = x

print(result)

 

풀이 해석 및 팁

 

이번 풀이에서 독특해보이는 녀석은 바로 파이썬의 내장함수 divmod() 입니다.

이 함수는 몫과 나머지를 반환해주는 함수입니다.

divmod(A, B)가 반환하는 값은 A // B(몫), A % B(나머지) 입니다.

반복문과 divmod를 이용해 몫과 나머지를 계속해서 구해줍니다.

divmod의 나머지 값을 num 문자열의 인덱스로 활용해서 10이 넘어가는 경우를 문자로 표시해줍니다.

이렇게 구해진 나머지를 result 문자열에 이어 붙일 때 여태까지 구해진 문자열 앞에 이어지도록 해주어야합니다.

여기까지 백준 11005번 진법 변환 2 의 풀이였습니다.

 

백준 2745번 진법 변화 문제와 비슷하지만 반대의 과정이 필요한 문제였습니다.

 

파이썬의 내장함수를 잘 활용하려면 직접 풀어보면서 한 번씩 경험을 해보는 것이 중요합니다.

 

스스로 생각한 과정을 코드로 옮겨서 풀이에 성공했다면

 

검색을 통해서 비슷한 기능의 내장함수가 존재하는가를 찾아봅시다.

 

만약에 비슷한 기능 또는 풀이에 유용하게 사용할 수 있는 내장함수가 존재한다면

 

다음에 또 비슷한 경우가 생기면 "얼핏 기억이 나면서 이럴 때 뭔가 사용했었는데....??" 라는 생각이

 

들기 마련입니다. 이런 경험이 쌓이고 쌓이다 보면 어느 순간 여러분의 머릿속에 여러 가지의

 

내장함수가 저장되어있을 겁니다.

 

감사합니다.

반응형