Algorithm Problem/Python

[python] λ°±μ€€ - 1148. 단어 λ§Œλ“€κΈ°

deo2kim 2021. 9. 6. 16:33
λ°˜μ‘ν˜•

πŸ€”λ¬Έμ œ ν•΄κ²°

  • λ”•μ…”λ„ˆλ¦¬μ— 퍼즐의 각 μ•ŒνŒŒλ²³μ„ ν‚€, κ·Έ μ•ŒνŒŒλ²³μ˜ κ°œμˆ˜μ™€ μ‚¬μš©λœ 횟수의 λ”•μ…”λ„ˆλ¦¬λ₯Ό 벨λ₯˜λ‘œ 가진닀.


  • 퍼즐에 μžˆλŠ” μ•ŒνŒŒλ²³μœΌλ‘œ 낱말을 λ§Œλ“€ 수 μžˆλ‹€λ©΄ νΌμ¦μ—μ„œ μ‚¬μš©λ  μ•ŒνŒŒλ²³μ˜ used_cnt λ₯Ό +1 ν•΄μ€€λ‹€.
  • μœ„μ™€ 같은 κ²°κ³Όκ°€ λ‚˜μ˜€κ²Œ 되고, used_cnt κ°€ κ°€μž₯ 적은 κ°’λ“€, κ°€μž₯ λ§Žμ€ 값듀을 μ•ŒνŒŒλ²³ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 좜λ ₯ν•΄μ€€λ‹€.

 

 

πŸ’»μ†ŒμŠ€ μ½”λ“œ

import pprint

import sys

input = sys.stdin.readline


# 인풋 λ°›μ•„μ„œ 단어 or 퍼즐 λ”°λ‘œ λ°°μ—΄λ‘œ λ§Œλ“œλŠ” ν•¨μˆ˜ (λ‘λ²ˆ λ°˜λ³΅ν• κ±° κ°™μ•„μ„œ ν•¨μˆ˜λ‘œ λ§Œλ“¦)
def input_func(arr, sign):
    arr = []
    while True:
        input_value = input().strip()
        if input_value == sign:
            break

        arr.append(input_value)
    return arr


words = input_func([], '-')
puzzles = input_func([], '#')

# print(words)
# print(puzzles)

for puzzle in puzzles:
    # print()
    puzzle_dict = {}  # κ³„μ‚°ν•œ κ²°κ³Όλ₯Ό μŒ“μ„ dict
    for p in puzzle:  # νΌμ¦μ—μ„œ 단어 ν•˜λ‚˜μ”© cnt: 단어 갯수, used_cnt: μ‚¬μš©λ  수 μžˆλŠ” word에 λŒ€ν•΄μ„œ μ‚¬μš©λ˜λŠ” 개수
        if not puzzle_dict.get(p):
            puzzle_dict[p] = {'cnt': 1, 'used_cnt': 0}
        else:
            puzzle_dict[p]['cnt'] += 1

    # pprint.pprint(puzzle_dict)

    for word in words:
        for w in set(word):
            w_cnt = word.count(w)
            # print(w_cnt)
            if not puzzle_dict.get(w) or w_cnt > puzzle_dict[w]['cnt']:  # μ•ŒνŒŒλ²³μ΄ 퍼즐에 μ—†κ±°λ‚˜, 퍼즐에 μžˆλŠ” μ•ŒνŒŒλ²³ κ°œμˆ˜λ³΄λ‹€ 더 많으면 μ‚¬μš© λͺ»ν•¨
                break

        else:  # μ‚¬μš©λ  수 μžˆλŠ” wordλŠ” 각 μ•ŒνŒŒλ²³μ˜ used_cnt λ₯Ό +1 ν•΄μ€€λ‹€.
            for w in set(word):
                puzzle_dict[w]['used_cnt'] += 1

    # pprint.pprint(puzzle_dict)
    
    
    # λ‹΅ κ΅¬ν•˜κΈ°
    min_cnt, max_cnt = 1e9, 0
    min_words, max_words = [], []
    for key, val in puzzle_dict.items():
        if val['used_cnt'] < min_cnt:
            min_words = [key]
            min_cnt = val['used_cnt']
        elif val['used_cnt'] == min_cnt:
            min_words.append(key)

        if val['used_cnt'] > max_cnt:
            max_words = [key]
            max_cnt = val['used_cnt']
        elif val['used_cnt'] == max_cnt:
            max_words.append(key)

    # print(min_words, min_cnt)
    # print(max_words, max_cnt)

    print(''.join(sorted(min_words)), min_cnt, ''.join(sorted(max_words)), max_cnt)

 

πŸ“•λ¬Έμ œ 확인

좜처: BACKJOON ONLINE JUDGE

 

 

 

λ°˜μ‘ν˜•