처음에는 위 그림처럼 풀면 되지 않을까하고 쉽게 생각했다. 아래 코드로 테스트케이스도 정답처럼 나오길래 내봤는데 바로 틀렸습니다가 뜨네 🥲
그래서 원인을 생각해봤는데 찾아보니 예외가 있었다. 덕분에 이해했습니다.
❌ 아래는 처음 제출했던 틀린 코드다.
### 틀린 답안 ###
N = int(input())
l = []
for i in range(0, N):
l.append(list(input()))
maximum = -1
for i in range(0, N):
maximum = max(maximum, len(l[i]))
for i in range(0, N):
if len(l[i]) < maximum:
for j in range(0, maximum-len(l[i])):
l[i].insert(j, '-')
val = 9 # 1씩 점차 줄여나감
dic = {'-': 0}
for j in range(0, maximum): # 열 -> 행
for i in range(0, N):
if l[i][j] not in dic.keys():
dic[l[i][j]] = val # 나중에 참조할 때 쓰기
l[i][j] = val # total 구할 때 쓰기
val -= 1
else:
l[i][j] = dic[l[i][j]]
total = 0
for i in range(0, N):
total += int(''.join(map(str, l[i])))
print(total)
그니까 자릿수랑 빈도수(?) 고려해서 더해버리면 된다는 거지..하고 다시 제출했더니 정답.
✅ 아래는 정답 코드다.
### 맞는 답안 ###
N = int(input())
l = []
for i in range(0, N):
l.append(list(input()))
dic = {}
for i in range(0, N):
for j in range(0, len(l[i])):
if l[i][j] not in dic.keys():
dic[l[i][j]] = pow(10, len(l[i]) - j - 1)
else:
dic[l[i][j]] += pow(10, len(l[i]) - j - 1)
total_list = sorted(dic.items(), key=lambda x: x[1], reverse=True)
total = 0
val = 9 # 1씩 점차 감소
for i in range(0, len(total_list)):
total += total_list[i][1] * val
val -= 1
print(total)