알파벳에 숫자를 부여하여 최대 결과값을 산출하는 조합을 찾기
1339번 문제
N = int(input())
alphabet,count_apb = ['']*9,''
for _ in range(N):
for i,a in enumerate(input()[::-1]):
alphabet[8-i] += a
count_apb += a*(i+1)
answer,number_hash,number = 0, {}, 9
for i,apb in enumerate(alphabet):
for a in sorted(apb,key = lambda x : count_apb.count(x), reverse = True):
if a not in number_hash.keys():
number_hash[a] = number
number -= 1
answer += number_hash[a]*(10**(8-i))
print(answer)
fail..
단어가 위치한 자리가 높은 십의 자리일 수록 높은 숫자를 부여하는 코드를 작성
반례) ABB/ BB 9회 반복
A : 8
B : 9
N = int(input())
char = {}
for _ in range(N):
input_char = input()
digits = len(input_char) # 자리수 확인
for ic in input_char:
if ic in char.keys():
char[ic] += 10**(digits-1)
else:
char[ic] = 10**(digits-1)
digits -= 1
sorted_char = sorted(char, key = lambda x: char[x], reverse = True)
answer = 0
iter = 0
for alphabet in sorted_char:
answer += char[alphabet]*(9-iter)
iter += 1
print(answer)
key point는 알파벳마다 자리수를 고려해 모두 더하고 더한 값의 대소를 비교하여, 가장 큰 값을 가진 알파벳부터 9를 부여하는 것이다.
AAA / BAC 이렇게 인풋이 주어진 경우, A = 100 + 10 + 1 + 10 = 121, B = 100, C = 1 이므로 A, B, C 순으로 9,8,7을 부여하여 9121 + 8100 + 7*1 의 답을 리턴한다.