728x90
https://www.acmicpc.net/problem/1339
(1) 딕셔너리 value값 (자릿수, 등장횟수)정렬 - 실패
import sys
input = sys.stdin.readline
N = int(input().rstrip())
alpha = list()
num_alpha = list()
alpha_dict = dict()
sorted_list = list()
for i in range(N):
M = input().rstrip()
alpha.append(M)
for j in range(len(M)):
A = M[j]
if A not in alpha_dict:
alpha_dict[A] = [len(M) - j, 1]
else:
alpha_dict[A][0] = max(alpha_dict[A][0], len(M) - j)
alpha_dict[A][1] += 1
# print(alpha_dict)
alpha_sort = sorted(alpha_dict, key = lambda x : (-alpha_dict[x][0], -alpha_dict[x][1]))
for i in alpha:
K = ""
for j in i:
K += str(9 - alpha_sort.index(j))
num_alpha.append(int(K))
print(sum(num_alpha))
맞왜틀맞왜틀!!을 열심히 외치다가 찾아낸 반례....
10
ABB
BB
BB
BB
BB
BB
BB
BB
BB
BB
이 예제에 대해 정답은 1790이 나와야 하는데 1780이 나와서 틀린 거였다.. A보다 B에 높은 가중치를 줘야 하는데, A에 높은 가중치를 주면 1780이 나온다. 즉 (A: 8, B:9)여야 하는데 (A:9, B:8)로 나와서 틀린것..
(2) 정답 코드
import sys
input = sys.stdin.readline
N = int(input().rstrip())
alpha = list()
num_alpha = list()
alpha_dict = dict()
sorted_list = list()
for i in range(N):
M = input().rstrip()
alpha.append(M)
for j in range(len(M)):
A = M[j]
if A not in alpha_dict:
alpha_dict[A] = (10 ** (len(M) - j - 1))
else:
alpha_dict[A] += (10 ** (len(M) - j - 1))
alpha_sort = sorted(alpha_dict, key = lambda x : (-alpha_dict[x]))
# print(alpha_sort)
for i in alpha:
K = ""
for j in i:
K += str(9 - alpha_sort.index(j))
num_alpha.append(int(K))
# print(alpha_dict)
# print(alpha_sort)
print(sum(num_alpha))
728x90
'Study > Coding Test' 카테고리의 다른 글
[백준] 1764 - 듣보잡 Python (0) | 2023.10.11 |
---|---|
[백준] 2563 - 색종이 Python (0) | 2023.10.11 |
[백준] 11047 - 동전 0 Python (0) | 2023.10.10 |
[백준] 14502 - 연구소 Python (0) | 2023.10.10 |
[백준] 2156 - 포도주 시식 Python (0) | 2023.10.10 |