Baekjoon 1339.py [단어 수학]

13492 단어 psps

문제가 궁금하다면?

첫번째 내 풀이(틀림)

import sys
input = sys.stdin.readline
n = int(input())
arr = []
for _ in range(n):
    arr.append(list(input().rstrip()))

wordArr = [0]*10
wordSize = 9
result = 0

while True:
    maxLength, maxIndex = 0, 0

    for i in range(len(arr)):
        if len(arr[i]) > maxLength:
            maxLength = len(arr[i])
            maxIndex = i
        elif len(arr[i]) == maxLength:
            a, b = 0, 0
            if len(arr[maxIndex]) == 0:
                break
            for p in range(len(arr)):
                a += arr[p].count(arr[maxIndex][0])
                b += arr[p].count(arr[i][0])
            if a > b:
                continue
            else:
                maxIndex = len(arr[i])
                maxIndex = i

    if len(arr[maxIndex]) == 0:
        break
    else:
        alphabet = arr[maxIndex].pop(0)

    if alphabet in wordArr:
        for j in range(len(wordArr)):
            if alphabet == wordArr[j]:
                result += j*(10**(maxLength-1))
    else:
        wordArr[wordSize] = alphabet
        result += wordSize*(10**(maxLength-1))
        wordSize -= 1

print(result)

두번째 내 풀이

import sys
input = sys.stdin.readline
n = int(input())
arr = []
for _ in range(n):
    arr.append(list(input().rstrip()))
wordDict = {}

for word in arr:
    k = len(word)-1
    for alphabet in word:
        if alphabet in wordDict:
            wordDict[alphabet] += 10 ** k
        else:
            wordDict[alphabet] = 10 ** k
        k -= 1

print(wordDict)
sortWords = sorted(wordDict.values(), reverse=True)
p = 9
result = 0
for word in sortWords:
    print(word)
    result += word*p
    p -= 1

print(result)

풀이 복기

처음 문제를 봤을때 높은 자리에 있는 문자에 높은 숫자를 부여했다. 하지만 풀면서 반례가 생겨 이 방법으로는 불가능하다고 깨달음. 모든 문자를 1로 바꿔 자리수에 맞춰 딕셔너리에 저장한 후 높은 문자에게 9부터 부여하여 풀었다.

사실 첫번째 방법밖에 생각이 안나서 두번째는 다른사람의 풀이를 참고했다. 딕셔너리를 다루는데 익숙치 않아서 약간 헷갈림이 있었다.

  • 딕셔너리 사용법 + 정렬방법
    - wordDict = {}
    - sorted(wordDict.values(), reverse = True)

좋은 웹페이지 즐겨찾기