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)
질문이나 오타 등은 댓글로 남겨주시면 참고하겠습니다.
'백준 & 알고리즘' 카테고리의 다른 글
[파이썬] 백준 28017번 - 게임을 클리어하자 풀이 (0) | 2023.06.11 |
---|---|
[파이썬] 백준 7501번 - Key 풀이 (0) | 2023.06.10 |
[파이썬] 백준 16236번 - 아기 상어 풀이 (0) | 2023.05.31 |
[파이썬] 백준 1904번 - 01타일 풀이 (0) | 2021.12.15 |
[파이썬] 백준 9461번 - 파도반 수열 풀이 (0) | 2021.12.15 |