[알고리즘] 백준 1620 : 나는야 포켓몬 마스터 이다솜 - S4

eternal moment·2023년 7월 17일
0

2023.07.17 풀이

#시간초과
import sys
input=sys.stdin.readline

arr=[]
n, m=map(int, input().split())
for _ in range(n):
    s=input()
    arr.append(s)
    
for _ in range(m):
    k=input()
    for i in k:
        if ord(i)>=48 and ord(i)<=57:
            k=int(k)
            break
    if type(k)==int:
        print(arr[k-1])
    else:
        print(arr.index(k)+1)
import sys
input=sys.stdin.readline

arr={}
n, m=map(int, input().split())
for i in range(1, n+1):
    s=input().rstrip()
    arr[i]=s
    arr[s]=i    

for _ in range(m):
    k=input().rstrip()
    for i in k:
        if ord(i)>=48 and ord(i)<=57:
            k=int(k)
            break
    if type(k)==int:
        print(arr[int(k)])
    else:
        print(arr[k])


다른 풀이

  1. 하나의 딕셔너리에 {포켓몬이름:넘버} {넘버:포켓몬이름} 을 다 넣어준 후 찾기
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
 
dict = {}
for i in range(1, n + 1):
    a = input().rstrip()
    dict[i] = a
    dict[a] = i
 
for i in range(m):
    quest = input().rstrip()
    if quest.isdigit():
        print(dict[int(quest)])
    else:
        print(dict[quest])

2.{포켓몬이름:넘버} {넘버:포켓몬이름} 두개의 딕셔너리 이용

import sys
input=sys.stdin.readline
n, m=map(int, input().split())
dic={}
dic2={}

for i in range(n):
    name=input().strip()
    dic[name]=(i+1)
    dic2[i+1]=name

for i in range(m):
    action=input().strip()
    if action.isdigit()==True:
        print(dic2[int(action)])
    if action.isalpha()==True:
        print(dic[action])


check point

  1. .isdigit()와 .isalpha()
    • .isdigit() : 문자열이 숫자로만 이루어져있는지 확인하는 함수
      문자열 중 모든 문자가 숫자면 True, 하나라도 숫자가 아니면 Fasle
    • .isalpha() : 문자열이 문자로만 이루어져있는지 확인하는 함수
      문자열 중 모든 문자가 문자면 True, 하나라도 아니면 False
  1. 시간초과
    • 키-벨류 값의 문제는 딕셔너리 이용 -시간복잡도에서 리스트보다 딕셔너리가 유용
  1. 문자열 줄내림으로 입력받을 때 rstrip() 유의하기

0개의 댓글