Algorithm/python 백준

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

✿(๑❛ڡ❛๑)✿ 2024. 3. 25. 16:34
728x90
SMALL

문제

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

 

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

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

www.acmicpc.net

 

 

풀이

N개의 문자열을 입력받고, 딕셔너리에 들어온 순서와 함께 저장한다.

문자열일경우 해당 숫자를, 숫자일 경우 해당 문자열을 출력한다.

 

😣

처음엔 딕셔너리를 하나로 만들고 키를 입력하면 value를 return하는 함수를 따로 만들었다.

하지만 딕셔너리의 모든 값을 읽어와서 비교하다보니 시간초과가 발생했다. 

import sys
N, M = map(int, sys.stdin.readline().split())
dic={}

def get_key_from_value(d, val):
    for key, value in d.items():
        if value == val:
            return key  # 발견한 키를 반환
    return None

for i in range(N):
    n=sys.stdin.readline().split('\n')[0]
    dic[i]=n
for i in range(M):
    m = sys.stdin.readline().split('\n')[0]
    if m.isnumeric(): #정수일때
        print(dic[int(m)-1])
    else : #문자열일때
        print(get_key_from_value(dic, m)+1)

 

 

 

😀

 딕셔너리를 두개 만들어서 해결했다 ( 1. key = 순서, value = 포켓몬이름 , 2. key =포켓몬 이름, value = 순서)

import sys
N, M = map(int, sys.stdin.readline().split())
dic_name={}
dic_number={}

for i in range(N):
    n=sys.stdin.readline().rstrip()
    dic_number[i+1]=n
    dic_name[n]=i+1
for i in range(M):
    m = sys.stdin.readline().rstrip()
    if m.isnumeric(): #정수이면 number이 key로 저장된 dic에서 value반환
        print(dic_number[int(m)])
    else : #정수가 아니면 name이 key로 저장된 dic에서 value반환 
        print(dic_name[m])

728x90
LIST