https://www.acmicpc.net/problem/1036
티어: 골드 1
로직
사용할 언어가 파이썬이기 때문에, 큰 수 처리는 따로 생각하지 않았습니다.
제가 사용한 로직은 대략적으로 다음과 같았습니다.
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 |