λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š Algorithm/Baekjoon

[Baekjoon] λ°±μ€€ 1339 '단어 μˆ˜ν•™' λ¬Έμ œν’€μ΄ Python, 파이썬, μ•Œκ³ λ¦¬μ¦˜ 정리

 

πŸ“ 1339 문제 

λ―Όμ‹μ΄λŠ” μˆ˜ν•™ν•™μ›μ—μ„œ 단어 μˆ˜ν•™ 문제λ₯Ό ν‘ΈλŠ” μˆ™μ œλ₯Ό λ°›μ•˜λ‹€.

단어 μˆ˜ν•™ λ¬Έμ œλŠ” N개의 λ‹¨μ–΄λ‘œ 이루어져 있으며, 각 λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ 이루어져 μžˆλ‹€. μ΄λ•Œ, 각 μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ₯Ό 0λΆ€ν„° 9κΉŒμ§€μ˜ 숫자 쀑 ν•˜λ‚˜λ‘œ λ°”κΏ”μ„œ N개의 수λ₯Ό ν•©ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 같은 μ•ŒνŒŒλ²³μ€ 같은 숫자둜 λ°”κΏ”μ•Ό ν•˜λ©°, 두 개 μ΄μƒμ˜ μ•ŒνŒŒλ²³μ΄ 같은 숫자둜 λ°”λ€Œμ–΄μ§€λ©΄ μ•ˆ λœλ‹€.

예λ₯Ό λ“€μ–΄, GCF + ACDEBλ₯Ό κ³„μ‚°ν•œλ‹€κ³  ν•  λ•Œ, A = 9, B = 4, C = 8, D = 6, E = 5, F = 3, G = 7둜 κ²°μ •ν•œλ‹€λ©΄, 두 수의 합은 99437이 λ˜μ–΄μ„œ μ΅œλŒ€κ°€ 될 것이닀.

N개의 단어가 μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ 수의 합을 μ΅œλŒ€λ‘œ λ§Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

μž…λ ₯ 

첫째 쀄에 λ‹¨μ–΄μ˜ 개수 N(1 ≤ N ≤ 10)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 단어가 ν•œ 쀄에 ν•˜λ‚˜μ”© 주어진닀. λ‹¨μ–΄λŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. λͺ¨λ“  단어에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ•ŒνŒŒλ²³μ€ μ΅œλŒ€ 10개이고, 수의 μ΅œλŒ€ κΈΈμ΄λŠ” 8이닀. μ„œλ‘œ λ‹€λ₯Έ λ¬ΈμžλŠ” μ„œλ‘œ λ‹€λ₯Έ 숫자λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 

 

좜λ ₯

첫째 쀄에 주어진 λ‹¨μ–΄μ˜ ν•©μ˜ μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€.

 

 

🧐 풀이

μœ„μ˜ λ¬Έμ œλŠ” 그리디 μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ΄λ‹€.

λ¨Όμ € N개의 단어λ₯Ό μž…λ ₯ λ°›μ•„μ„œ word에 μ €μž₯을 ν•œλ‹€.

μ•ŒνŒŒλ²³ λ³„λ‘œ μ–΄λ–€ 숫자λ₯Ό κ°€μ§€λŠ” 지 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ word_dictλ₯Ό λ§Œλ“€κ³  각 숫자λ₯Ό 담을 num_list도 λ§Œλ“ λ‹€. 

각 단어듀을 λ°˜λ³΅λ¬Έμ„ 톡해 ν•˜λ‚˜μ”© λ”°μ Έλ³΄λ©΄μ„œ word_dict에 μžˆλ‹€λ©΄, 자릿수λ₯Ό μ²΄ν¬ν•΄μ„œ 값을 λ§€μΉ­μ‹œν‚¨λ‹€. 

맀칭 μ™„λ£Œ  ν›„ λ”•μ…”λ„ˆλ¦¬μ˜ valueκ°’λ“€λ§Œ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. μ •λ ¬ν•œ μˆœμ„œλŒ€λ‘œ 9λΆ€ν„° 1κΉŒμ§€ κ³±ν•˜λ©΄ λœλ‹€. 

 

N = int(input())
word = []	#단어 μ €μž₯
word_dict = {}	#μ•ŒνŒŒλ²³κ³Ό 숫자 μ €μž₯
num_list = []	#숫자 μ €μž₯

# N개의 단어 μž…λ ₯λ°›κΈ° 
for i in range(N) :
    w = input()
    word.append(w)

# 단어듀을 ν•˜λ‚˜μ”© λ”°μ Έλ³΄λ©΄μ„œ 자릿수 계산
for i in range(N) :
    for j in range(len(word[i])) :
        if word[i][j] in word_dict :
            word_dict[word[i][j]] += 10  ** (len(word[i])-j-1)
        else :
            word_dict[word[i][j]] = 10 ** (len(word[i])-j-1)

# λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
for i in word_dict.values() :
    num_list.append(i)
num_list.sort(reverse=True)

# 9λΆ€ν„° κ³±ν•΄μ£ΌκΈ° 
sum = 0
pows = 9
for i in num_list :
    sum += pows * i
    pows -= 1
print(sum)
 

 

 

728x90