https://www.acmicpc.net/problem/1620
N개의 포켓몬 이름을 입력받고
M개의 찾을 포켓몬 이름 혹은 인덱스 번호를 입력하면 인덱스 혹은 이름을 출력해 주면 되는 문제다.
import sys
n, m = map(int, input().split())
pokemon_int = {}
pokemon_string = {}
for i in range(0, n , 1) :
pokemon_int[i] = sys.stdin.readline().rstrip()
pokemon_string = {v : k for k, v in pokemon_int.items()}
for i in range(0, m, 1) :
q = sys.stdin.readline().rstrip()
if q.isdigit() :
print(pokemon_int[int(q)-1])
else :
print(pokemon_string[q]+1)
import sys
n, m = map(int, input().split())
pokemon = []
for i in range(0, n , 1) :
pokemon.append(sys.stdin.readline().rstrip())
for i in range(0, m, 1) :
q = sys.stdin.readline().rstrip()
if q.isdigit() :
print(pokemon[int(q)-1])
else :
print(pokemon.index(q)+1)
이건 오답
처음엔 아무 생각 없이 리스트로 문제를 풀었었는데, 입력 받는 M, N이 각각 100,000개까지 입력받을 수 있다 보니 리스트로 풀면 시간초과가 난다.
그래서 딕셔너리로 문제를 풀었다.
딕셔너리에 각각
pokemon_int에는 index를 key값으로, 포켓몬 이름을 value값으로 주고
pokemon_string에는 이와 반대로 저장했다.
이렇게 하면 숫자를 입력받으면 해당 key값의 value를 출력해주면 되고
포켓몬의 이름을 입력받으면 똑같이 해당 key값의 value를 출력해주면 된다.
이런 방법이 있는지 처음알았다 ㅋㅋ 리스트를 사용하면 값을 찾기 위해 하나하나 찾아야 하지만 딕셔너리는 key값이 따로 있으니 아주 좋은 방법인 것 같다.
index와 value값으로 해결해야 하는 문제는 앞으로 딕셔너리를 사용해서 풀어야겠다.
[백준/파이썬]15649 N과 M(1) (0) | 2023.06.07 |
---|---|
[백준/파이썬]1874번 스택수열 (0) | 2023.06.07 |
[백준/파이썬]18870번 좌표 압축 (0) | 2023.06.06 |
[백준/파이썬]14719번 빗물 (0) | 2023.06.06 |
[백준/파이썬]16120번 PPAP (0) | 2023.06.02 |