알고리즘/수학

[백준]1132 합 #자릿수

씩씩한 IT블로그 2020. 6. 17. 21:30
반응형

1. 풀이

(1) 각 숫자의 계수를 구해준 후

(2) 계수가 가장 큰 숫자부터 9에서 0까지 차례대로 넣어준다.

이때 알파벳이 10개이상일 때(숫자 0까지 써야할 때) 첫째자리에 있는 숫자가 0이되지 않도록 주의한다.

ex)

(1) 숫자의 계수 구하기

ABC : 100A+10B+C

BCA : 100B+10C+A

총합 => 101A+110B+11C

(2)계수가 가장 큰 수부터 9에서 0까지 차례대로 넣기.

정렬하면 => 110B,101A,11C

계수가 큰 수 부터 9씩 넣기 (B=9, A=8, C=7)

※참고 : [boj]1339 단어수학

2. 소스코드

N=int(input())
gasoo=[[0,"A"],[0,"B"],[0,"C"],[0,"D"],[0,"E"],
       [0,"F"],[0,"G"],[0,"H"],[0,"I"],[0,"J"],]
neverZero=[0 for i in range(10)]
for i in range(N):
    word=input()
    size=len(word)
    for j in range(size):
        index=ord(word[size-1-j])-65
        if j==size-1:
            neverZero[index]=1
        gasoo[index][0]+=10**j

gasoo.sort(reverse=True)
# 0이 안되는거 확인(0까지 쓰일때만)
if gasoo[9][0]!=0:
    for i in range(9,-1,-1):
        if neverZero[ord(gasoo[i][1])-65]==0:
            temp=list(gasoo[i])
            gasoo.remove(temp)
            gasoo.append(temp)
            break

ans=0
for i in range(10):
    ans+=gasoo[i][0]*(9-i)
print(ans)
반응형