<문제>

https://www.acmicpc.net/problem/31562

 

<풀이>

import sys

input = sys.stdin.read().splitlines()
N, M = map(int, input.pop(0).split())

known_dict = {}

for i in range(N):
    notes = input[i].split()

    T = int(notes.pop(0))
    name = notes.pop(0)

    first_notes = ''.join(notes)[0:3]

    if first_notes not in known_dict:
        known_dict[first_notes] = [name]
    else:
        known_dict[first_notes].append(name)

for j in range(N, N + M):
    test_notes = input[j].replace(' ', '')
    match = len(known_dict[test_notes]) if test_notes in known_dict else 0

    if match > 1:
        print('?')
    elif match == 1:
        print(known_dict[test_notes][0])
    else:
        print('!')

 

- 문자열 다루기 + 해시테이블 

- 3음을 문자열으로 만들어서 key로

- 노래 제목을 key의 value로

- 그런데 key가 겹칠 수 있으므로 value가 2개 이상이 올 수 있음 -> linked list, 다음에 오는 노드를 뒤로 붙이기

- 문제에서는 단순히 value의 갯수가 1개 이상인지를 알면 되므로 len만 필요

- 테스트 3음을 key로 조회해서 각각 print

'TIL > [파이썬] 1일 1코테' 카테고리의 다른 글

기술 연계마스터 임스_백준25497  (0) 2025.02.03
회상_백준32953  (0) 2025.01.24
아 맞다 마늘_백준32978  (0) 2025.01.22
Hashing_백준15829  (0) 2025.01.22
할리갈리_백준27160  (0) 2025.01.20

+ Recent posts