백준 1339 단어수학

고장난 고양이·2022년 10월 10일
0

알고리즘_python

목록 보기
73/84
post-thumbnail

문제

https://www.acmicpc.net/problem/1339

코드

n=int(input())

alpha=[]
dic={}
nums=[]

for i in range(n):
    alpha.append(input())

for i in range(n):
    for j in range(len(alpha[i])):
        if alpha[i][j] in dic:
            dic[alpha[i][j]]+=10**(len(alpha[i])-j-1)
        else:
            dic[alpha[i][j]]=10**(len(alpha[i])-j-1)

for value in dic.values():
    nums.append(value)

nums.sort(reverse=True)


answer=0
count=9
for i in nums:
    answer+=count*i
    count-=1

print(answer)
  • 그리디문제이다. 높은 자리수를 가진 알파벳 순으로 9에서부터0까지 부여하여 계산하는 문제이다.

  • 알파벳 사전을 만들기 위해 dictionary를 사용해서 만든다. 문자열들을 하나씩 탐색한다.

  • 탐색하면서 자리수 만큼 더해주고 기존에 이미 넣어놓았다면 추가해서 다시 넣어 놓는다.

  • 그후 사전의 value만 뽑아내서 역순으로 정렬 후 큰값부터 9를 부여하며 더해준다.

  • 이는 999+88 => 900+90+9+80+8로 계산하는 것처럼 쪼갠다음에 알파벳끼리 모아서 더해주는 느낌이다.

  • 예시 2번 {A:10000,B:1,c:1010,d:100,e:1,f:1,g:100} 이와 같다.

profile
개발새발X발일지

0개의 댓글