728x90
굉장히 그리디하게 풀면 될 것 같은 느낌 (경우의 수를 구하는 경우에서는 특히 브루트포스로 구해도 될 것 같다)
답안 코드는 이하와 같다.
import sys
from collections import defaultdict
input = sys.stdin.readline
N = int(input())
dict = {}
num = {}
for i in range (0,10):
dict[i] = str(i)
num[str(i)] = i
for i in range (0,26):
dict[i + 10] = chr(i + 65)
num[chr(i + 65)] = i + 10
summary = [0 for _ in range (0,36)]
#여기까지 기본 세팅
for _ in range (0,N):
string = input().rstrip()
t = len(string)
for i in range (0,t):
summary[num[string[i]]] += (36 ** (t - i - 1))
K = int(input())
answer = 0
maximize = []
for i in range (0,36):
maximize.append([dict[i], (35 - i) * summary[i]])
maximize.sort(key = lambda x: -x[1])
for i in range (0,K):
answer += 35 * summary[num[maximize[i][0]]]
for i in range (K,36):
answer += num[maximize[i][0]] * summary[num[maximize[i][0]]]
answer_string = []
while answer != 0:
answer_string.append(dict[answer % 36])
answer //= 36
answer_string = answer_string[::-1]
if answer_string != []:
print("".join(s for s in answer_string))
else:
print("0")
'코딩' 카테고리의 다른 글
[BOJ, 백준] 14567 선수과목 Python (0) | 2024.10.18 |
---|---|
[BOJ, 백준] 25958 예쁜수 Python (1) | 2024.10.15 |
[BOJ, 백준] 24726 미적분학 입문하기 2 Python (0) | 2024.10.04 |
[BOJ, 백준] 27725 지수를 더하자 Python (1) | 2024.09.06 |
[BOJ, 백준] 1916 최소비용 구하기 python (0) | 2024.09.02 |