728x90
반응형
구현 언어: 파이썬
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
pokemon_dic = {}
pokemon_names = []
# 포켓몬 도감 만들기
for i in range(n):
name = input()
# 입력 받은 값을 딕셔너리에 저장
pokemon_dic[i+1] = name
# 입력 받은 포켓몬 이름만 리스트에 저장
pokemon_names.append(name)
# 퀴즈
for i in range(m):
quiz = input()
try: # 숫자가 주어졌을 때
print(pokemon_dic[int(quiz)])
except: # 이름이 주어졌을 때
print(pokemon_names.index(quiz) + 1)
위 코드는 시간 초과..
import sys
n, m = map(int, sys.stdin.readline().split())
# 포켓몬 도감 만들기
pokemon_names = [sys.stdin.readline().strip() for i in range(n)]
# 퀴즈
for i in range(m):
quiz = input()
try: # 숫자가 주어졌을 때
print(pokemon_names[int(quiz) - 1])
except: # 이름이 주어졌을 때
print(pokemon_names.index(quiz) + 1)
딕셔너리를 아예 없애고 리스트로만 로직을 구현해봤지만 위 코드도 시간 초과
위 코드에서 .strip()은 입력 받은 문자열이 저장될 때 \n을 제거하기 위해 사용하였다.
import sys
n, m = map(int, sys.stdin.readline().split())
pokemon_id = {}
pokemon_name = {}
# 포켓몬 도감 만들기
for i in range(n):
name = sys.stdin.readline().strip()
# 딕셔너리를 두 개 만든다
pokemon_id[i+1] = name
pokemon_name[name] = i + 1
# 퀴즈
for i in range(m):
quiz = sys.stdin.readline().strip()
try: # 숫자가 주어졌을 때
print(pokemon_id[int(quiz)])
except: # 이름이 주어졌을 때
print(pokemon_name[quiz])
도저히 다른 방법이 생각이 안 나서 블로그를 몇 개 봤더니 딕셔너리를 두 개 사용하여 푼 사례가 있었다.
처음 풀이 때 딕셔너리를 사용해야겠다는 생각은 했지만, value를 받아서 key를 구하는 과정에서 시간 복잡도가 올라갈 것 같아 딕셔너리와 리스트를 동시에 사용했는데, 딕셔너리 두 개를 사용할 생각은 왜 안 했을까.
어쨌든 위 코드로는 정답 처리가 되었다.
시도 횟수: 4
728x90
반응형
'Archive > BOJ' 카테고리의 다른 글
백준 1003번: 피보나치 함수 (0) | 2021.03.14 |
---|---|
백준 1764번: 듣보잡 (0) | 2021.03.13 |
백준 11651번: 좌표 정렬하기 2 (0) | 2021.02.18 |
백준 10989번: 수 정렬하기 3 (0) | 2021.02.18 |
백준 7568번: 덩치 (0) | 2021.02.18 |