[백준] 1339번 단어 수학

heering·2023년 2월 15일
0

백준

목록 보기
4/11

1차 접근 방식


처음에는 위 그림처럼 풀면 되지 않을까하고 쉽게 생각했다. 아래 코드로 테스트케이스도 정답처럼 나오길래 내봤는데 바로 틀렸습니다가 뜨네 🥲
그래서 원인을 생각해봤는데 찾아보니 예외가 있었다. 덕분에 이해했습니다.

❌ 아래는 처음 제출했던 틀린 코드다.

### 틀린 답안 ###
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)

2차 접근 방식

그니까 자릿수랑 빈도수(?) 고려해서 더해버리면 된다는 거지..하고 다시 제출했더니 정답.

✅ 아래는 정답 코드다.

### 맞는 답안 ###
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)

0개의 댓글