알고리즘 문제풀이

백준 1620. 나는야 포켓몬 마스터 이다솜 Python 실버4

아크몽 2024. 2. 21. 01:43

트리?로 풀어보려고 찾았는데, 인접리스트?로 풀어봤고,

시간 초과 뜸

n, m = map(int,input().split())
# 1 <=  N,m <= 100000
# 도감 번호와 이름이 연결되있어야 한다
arr = [0] + [input() for _ in range(n)]
# print(arr)
adjl = [[0]*2 for _ in range(n+1)] # 1~n 까지 써야되서
for i in range(1,n+1): # 인덱스랑 이름 연결하기
    adjl[i][0] = i
    adjl[i][1] = arr[i]
# print(adjl)
find_pkmon = [input() for _ in range(m)]
# print(find_pkmon)
for x in range(5):
    if find_pkmon[x].isdigit():
        print(adjl[int(find_pkmon[x])][1])
    else:
        for y in range(len(adjl)):
            if find_pkmon[x] == adjl[y][1]:
                print(adjl[y][0])

그래서 딕셔너리써서 넘어감... 그냥 해쉬가 최고다

import sys;
input=sys.stdin.readline
n, m = map(int,input().split())
# 1 <=  N,m <= 100000
# 도감 번호와 이름이 연결되있어야 한다
pokmon_dict1 = {}
pokmon_dict2 = {}
for i in range(n):
    name = input().strip()
    pokmon_dict1[name] = i+1
    pokmon_dict2[i+1] = name
for i in range(m):
    find_pkmon = input().strip()
    if find_pkmon.isdigit():
        print(pokmon_dict2[int(find_pkmon)])
    else:
        print(pokmon_dict1[find_pkmon])

value를 이용해서 키값을 찾으려고 했지만, 이럴 경우 딕셔너리를 여러번 돌려야되기때문에 비효율적이라고 판단됨
=> 딕셔너리1 (번호:이름 ), 딕셔너리2 (이름:번호) 두 개 만들어서 각각 불러오게 함