ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] 백준 - 1132 - 합
    알고리즘 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)
Designed by Tistory.