Baekjoon 1339.py [단어 수학]
첫번째 내 풀이(틀림)
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)
Author And Source
이 문제에 관하여(Baekjoon 1339.py [단어 수학]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hohooodo/Baekjoon-1339.py-단어-수학저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)