문제링크 :https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
처음에 그냥 자리수별로 9부터 부여하면되는줄알고 풀었는데 답이 틀렸다고 나왔다.
가중치를 계산하는 생각을 하는데 시간이 오래걸렸다.
그리고 파이썬 딕셔너리를 문제풀때 처음 써봤는데 연습하기 딱 좋았다
#단어갯수
n = int(input())
alphabets = []
#알파벳 계산식 입력
for _ in range(n):
alphabet = input()
alphabets.append(alphabet)
#가중치 dict
weight = {}
for i in range(n):
#문자별 가중치 계산
for j in range(0, len(alphabets[i])):
if weight.get(alphabets[i][j]) != None:
weight[alphabets[i][j]] += 10 ** (len(alphabets[i])-1-j)
else :
weight[alphabets[i][j]] = 10 ** (len(alphabets[i])-1-j)
#가중치 정렬
sorted_weight = sorted(weight.items(), key = lambda item : item[1], reverse = True)
#가중치에 따른 숫자가 들어갈 dict
weight_num = {}
#시작 숫자
num = 9
#가중치에따라 숫자 부여
for i in sorted_weight:
weight_num[i[0]] = str(num)
num -= 1
#합계
result = 0
#알파벳을 숫자로 치환하고 덧셈
for i in range(n):
temp = ""
for j in range(0, len(alphabets[i])):
temp += weight_num.get(alphabets[i][j])
result += int(temp)
#출력
print(result)
'알고리즘' 카테고리의 다른 글
python 백준11931 수 정렬하기 4(BOJ11931) (0) | 2022.12.22 |
---|---|
python 백준1439 뒤집기(BOJ1439 ) (0) | 2022.08.02 |
python 백준1946 신입사원(BOJ1946 ) (0) | 2022.07.31 |
python 백준1789 수들의 합(BOJ1789) (0) | 2022.07.31 |
python 백준2217 로프(BOJ2217) (0) | 2022.07.25 |