알고리즘 문제풀이
백준 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 (이름:번호) 두 개 만들어서 각각 불러오게 함