We will find a way, we always have.

-interstellar

Problem Solving/백준

[백준] 1620번: 나는야 포켓몬 마스터 이다솜 - 파이썬

Redddy 2022. 5. 3. 13:19

⚽ 서론

dict() 형 그러니까 해시를 사용한 집합과 맵에서 새로운 걸 발견해서 글로 남기기로 했다!

 

🧩문제 해석

포켓몬 이름을 받은 뒤 받은 순서대로 포켓몬 도감에 저장한다. 포켓몬 이름을 문제로 냈을 때 그 포켓몬이 몇번째로 도감에 등록됐는지 출력하고, 수를 입력했을 때는 그 수의 등록된 포켓몬 이름을 출력하면 되는 문제
(걸그룹 마스터 문제랑 비슷한 유형이다)

 

📖 풀이

처음에는 포켓몬 이름을 입력받으면 key에는 이름을, value에는 수를 저장한 다음
문제를 맞출 때 이름이 들어오면 포켓몬도감[이름] 이런식으로 출력하면 됐지만 수가 입력될 때는 값을 하나하나 찾아야 했다. 즉 key가 입력되면 바로 찾을 수 있지만 value가 입력되고 key 값을 찾으려면 하나하나 다 돌아야 했었다. value를 입력했을 때 바로 key를 출력해줄 함수를 찾지 못했었다. 어찌보면 당연한 말이다. 예를 들어 우리도 만약 전기라는 의미를 찾기위해 사전을 보면 ㄱ,ㄴ,ㄷ 순으로 쭉 찾아가 전기의 뜻을 찾을 수 있다. 하지만 반대로 "전하의 존재 및 흐름과 관련된 물리현상들의 총체이다."라는 의미를 가진 단어를 찾는 것은 하나하나 다 돌아봐야 한다. ㅋㅋㅋ 이런 방법으로 하니 시간 초과가 나왔다.

해결 방법은 간단하다! 뜻도 사전에 등록해두는 것이다.
{"전기" : "전하의 존재 및 흐름과 관련된 물리현상들의 총체이다", "전하의 존재 및 흐름과 관련된 물리현상들의 총체이다" : "전기"}  이렇게 둘다 찾을 수 있게 저장하는 방법이다. 이런 방법을 사용하니 시간초과가 해결되었다.

 

💻 코드

import sys
input = sys.stdin.readline

n, m = map(int, input().rstrip().split())
poketmon = dict()
for i in range(1, n+1):
    name = input().rstrip()
    poketmon[name] = i
    poketmon[str(i)] = name

for j in range(m):
    guess = input().rstrip()
    print(poketmon[guess])

약 드실 시간이에요

 

문제 : 나는야 포켓몬 마스터 이다솜