알고리즘

[백준 1339 골드4] 단어 수학

GriffinDouble 2021. 1. 14. 17:06

www.acmicpc.net/problem/1339

 

1339번: 단어 수학

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

www.acmicpc.net

해결방안

  • 그리디(Greedy)를 이용한 방식 사용

알고리즘

  1. 들어오는 단어들을 숫자로 나눔

    • abc => 100a + 10b + c
  2. 각 문자들을 10의 배수에 대한 딕셔너리로 처리해서 넣어줌
    • abc라면, a에는 100, b에는 10, c에는 1
  3. 딕셔너리 아이템의 value들을 가지고 내림차순으로 정렬 시킨 리스트 생성
  4. 리스트를 돌면서 9부터 줄여가며 곱해줌
    • 9부터 줄여가는 이유는 최대값이 9이기 때문

핵심 팁

  • Greedy 문제
  • 각 경우의 최적의 해를 찾는 것이 중요
  • 어떤 알파벳이 가장 큰 값이 들어가는지 굳이 고려할 필요 없음
    • 어차피 순서에 상관없이 값이 가장 큰 곳에 넣을 수 있는 가장 큰 값을 넣으면 되기 때문

 

n = int(input())
data = list()
for _ in range(n):
    e = input()
    data.append(e)
total = dict()
for ele in data:
    for i in range(len(ele)):
        dec = 10 ** (len(ele) - i - 1)
        if ele[i] in total:
            total[ele[i]] += dec
        else:
            total[ele[i]] = dec
num_list = sorted(total.items(), key=lambda x: x[1], reverse=True)
init_count = 9
sum = 0
for i in num_list:
    sum += i[1] * init_count
    init_count -= 1
print(sum)

 

 

*퍼가신다면 출처와 댓글 부탁드립니다.

*더 많은 자료는 아래 github에 있습니다

https://github.com/griffinGC/Algoritm_PS

https://github.com/griffinGC/TIL_Public

'알고리즘' 카테고리의 다른 글

[백준 1987 골드4] 알파벳  (0) 2021.02.06
[백준 7576 실버1] 토마토  (0) 2021.01.12
[프로그래머스 level3] 여행경로  (0) 2020.12.17