알고리즘
[알고리즘] 백준 - 1132 - 합
j9972
2022. 11. 29. 19:39
728x90
1. 문제
2. 접근
1. 처음에는 dictionary 를 사용해서 계수를 구하여 문제를 풀었는데, 첫번째 자리에 나오는 alphabet은 0이 되면 안된다는 조건때문에 문제를 계속 틀렸다 ( 특정 알파벳을 다 쓰지 않는 예시들은 맞을 수 있으나, 알파벳을 다 쓰는 예시는 틀린다 )
2. 그래서 구글링을 통해 안 점은 first 배열을 만들고 A - J 순서로 0을 채우고, 반복문을 돌리며 첫번째 알파벳을 보고 배열에 체크를 하는 것이다.
3. 그리고 역순으로 정렬해서 거꾸로 체크해가며 9부터 대입하여 문제를 푼다
3. 풀이
n = int(input())
arr = [[0, 'A'], [0, 'B'], [0, 'C'], [0, 'D'], [0, 'E'],
[0, 'F'], [0, 'G'], [0, 'H'], [0, 'I'], [0, 'J']]
first = [0 for _ in range(10)]
for i in range(n):
word = input()
size = len(word)
for j in range(size):
idx = ord(word[size-j-1]) - 65 # 65는 ord('A') 값 => word를 순차적으로 해서 idx를 구한다
if j == size - 1:
first[idx] = 1
arr[idx][0] += 10**j # 계수를 구해서 더해준다
arr.sort(reverse=True) #내림차순
if arr[9][0] != 0: # 내림차순 정렬된 배열의 마지막 원소의 값이 0이 아니라면 모든 알파벳 사용한것
for i in range(9, -1, -1): # 거꾸로 구해간다
if first[ord(arr[i][1]) - 65] == 0: # first에 들어있는지 체크
temp = list(arr[i])
arr.remove(temp)
arr.append(temp)
break
res = 0
for i in range(10):
res += arr[i][0] * (9-i) # 계수 * (9-i)
print(res)