티스토리 뷰

알고리즘/백준

백준 / 1339 단어 수학 python3

4567은 소수 2021. 3. 9. 03:22

www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

주어진 문자열에 숫자 0~9를 대입하여 합이 최대로 나오게 만들면 된다. 

긴 문자열 순으로 앞에서부터 9부터 넣어가면 된다.

 

하지만 하나 주의할 점은 BAA, AAA 와 같은 경우 A에 9를 넣어야 하지만, 순서대로 하면 B에 9를 넣을 수도 있다. 

그래서 우선 각 알파벳 별로 dict를 이용해 가능한 10의 거듭제곱으로 값을 만들어주었다. AAA의 경우 dict['A']에 111을 더하게 된다. 

그리고 여기서 가장 큰 값부터 9부터 곱해서 더해주면 된다.

 

코드는 다음과 같다.

n = int(input())
arr = []
for i in range(n):
    alphabet = input()
    arr.append(alphabet)

check = dict()
    
for alpha in arr:
    cnt = 0
    for i in alpha:
        if i in check:
            check[i] += 10 ** (len(alpha) - cnt - 1)
        else:
            check[i] = 10 ** (len(alpha) - cnt - 1)
        cnt += 1

val = list(check.values())
val.sort(reverse=True)

result = 0
tmp = 9
for i in val:
    result += tmp * i
    tmp -= 1

print(result)

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 / 1949 우수 마을 C++  (0) 2021.03.12
백준 / 1005 ACM Craft  (0) 2021.03.12
백준 / 2533 사회망 서비스 C++  (0) 2021.03.08
백준 / 1069 집으로 python3  (0) 2021.03.07
백준 / 11559 Puyo Puyo C++  (0) 2021.03.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함