본문 바로가기

백준 & 알고리즘

[파이썬] 백준 1036번 - 36진수 풀이

 

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

티어: 골드 1

 

1036번: 36진수

첫째 줄에 수의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 수가 주어진다. N은 최대 50이고, 수의 길이도 최대 50이다. 마지막 줄에 K가 주어진다. K는 36보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

 

 

로직

 

사용할 언어가 파이썬이기 때문에, 큰 수 처리는 따로 생각하지 않았습니다.

 

제가 사용한 로직은 대략적으로 다음과 같았습니다.

 

1. count 딕셔너리를 만들어 각 문자의 계수를 저장해놓는다.

2. count 딕셔너리의 값에 각 문자열이 Z로 바꼈을 때의 차를 계산해 곱한다 (중요도)

3. count 딕셔너리를 각 문자와 중요도를 묶어놓은 tuple을 원소로 갖는 리스트로 변경, ( ex: [ ("A" : 20), ("B" : 10) ] ) 중요도가 높은 순서로 정렬한다.

4. 중요도가 높은 문자 K개를 "Z" 로 바꾼다

5. 바꾼 36진수를 10진수로 바꾸고, 더한다

6. 더한 10진수를 다시 36진수로 바꾼다

 

 

10진수 <-> 36진수 변환 방법

10진수 -> 36진수

10진수를 2진수, 8진수로 바꾸는 방법과 같게 구현했습니다.

10진수를 다른 진수로 바꾸는 법은 https://sdks.tistory.com/668 다음 글을 참고해주세요.

 

36진수 -> 10진수

파이썬에서 다른 진수를 10진수로 변환하는것은 int() 함수를 이용합니다.

변환하려는 수가 A, N진수라고 했을때 N진수 -> 10진수는 다음과 같이 변환 가능합니다.

int(A, N)

 

질문이나 오타 등은 댓글로 남겨주시면 참고하겠습니다.