백준1620(파이썬) - 나는야포켓몬마스터이다솜

resilient

·

2021. 7. 3. 13:18

728x90
반응형

https://www.acmicpc.net/problem/1620

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

  • 이 문제를 읽고 처음 든 생각은 `해쉬로 풀어야겠다` 였다.
  • 먼저 data딕셔너리에 key값에 value를 저장해놓고 맞춰야할 데이터는 quiz 리스트를 만들어서 거기에 담아두었다.
  • 파이썬 딕셔너리 구조로 key를 이용해서 value값을 알 수 있지만, value값으로 key값을 알려면 key와 value 위치를 바꿔야 하기 때문에 reversed를 시켜줘서 reverse_data 딕셔너리에 저장해줬다.
  • 그리고 맞춰야할 데이터들을 for문을 돌려주면서 만약에 i가 숫자라면 data에서, 문자라면 reverse_data에서 value값을 뽑아올수 있게 하였다.
  • 여기서 quiz 안에는 모두 문자열이기 때문에 그냥 쉽게 풀어서 아스키코드로 48~57(숫자 0~9범위) 이면 숫자로, 그 외에는 문자라고 생각해서 풀어줬다.
import sys
input = sys.stdin.readline

# 이문제는 해쉬문제이다.
# 파이썬에서는 딕셔너리로 풀이가능하다.
n,m = map(int,input().split())
data = {}
quiz = []
ans = []
for i in range(n):
    data[str(i+1)] = input().rstrip()
for _ in range(m):
    quiz.append(input().rstrip())

# key에서 value를 가져오는게 아닌 value에서 key를 가져오기위해
# key와 value위치를 바꿨다.
reverse_data = dict(map(reversed,data.items()))

for i in quiz:
    if 48<=ord(i[0])<=57:
        ans.append(data.get(str(i)))
    else:
        ans.append(reverse_data.get(str(i)))
for i in ans:
    print(i)
반응형