[백준] 단어 수학

코딩코딩·2022년 5월 24일
0

알파벳에 숫자를 부여하여 최대 결과값을 산출하는 조합을 찾기
1339번 문제

22-05-24

N = int(input())
alphabet,count_apb = ['']*9,''
for _ in range(N):
    for i,a in enumerate(input()[::-1]):
        alphabet[8-i] += a
        count_apb += a*(i+1)
        
answer,number_hash,number = 0, {}, 9
for i,apb in enumerate(alphabet):
    for a in sorted(apb,key = lambda x : count_apb.count(x), reverse = True):
        if a not in number_hash.keys():
            number_hash[a] = number
            number -= 1
        answer += number_hash[a]*(10**(8-i))
                
print(answer)

fail..
단어가 위치한 자리가 높은 십의 자리일 수록 높은 숫자를 부여하는 코드를 작성

반례) ABB/ BB 9회 반복
A : 8
B : 9

24-06-21

N = int(input())

char = {}
for _ in range(N):

  input_char = input()
  digits = len(input_char) # 자리수 확인

  for ic in input_char:
    if ic in char.keys():
      char[ic] += 10**(digits-1)
    else:
      char[ic] = 10**(digits-1)

    digits -= 1

sorted_char = sorted(char, key = lambda x: char[x], reverse = True)

answer = 0
iter = 0
for alphabet in sorted_char:
  answer += char[alphabet]*(9-iter)
  iter += 1

print(answer)

key point는 알파벳마다 자리수를 고려해 모두 더하고 더한 값의 대소를 비교하여, 가장 큰 값을 가진 알파벳부터 9를 부여하는 것이다.
AAA / BAC 이렇게 인풋이 주어진 경우, A = 100 + 10 + 1 + 10 = 121, B = 100, C = 1 이므로 A, B, C 순으로 9,8,7을 부여하여 9121 + 8100 + 7*1 의 답을 리턴한다.

profile
심심해서 하는 코딩..

0개의 댓글