룰루코딩

백준 1620 나는야 포켓몬 마스터 이다솜 본문

백준

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

rulru01 2024. 9. 27. 23:48

문제


솔루션

n,m = map(int,input().split())
dict = {}

for num in range(1,n+1):
    po =input()
    dict[num] = po
    dict[po] = num

for i in range(m):
    ans=input()
    if ans.isdigit():
        print(dict[int(ans)])
    else:
        print(dict[ans])

깨달은점

n,m = map(int,input().split())
li=[]

for _ in range(n):
    li.append(input())

for _ in range(m):
    ans = input()
    if ans in li:
        print(li.index(i)+1)
    else: 
        print(li[i-1])

처음에 이런식으로 하려했는데 시간초과가 났다.

리스트(O(n))는 딕셔너리(O(1))보다 시간복잡도가 복잡하다.

딕셔너리를 이용해서 풀어야한다. 

 

    dict[num] = po
    dict[po] = num

 딕셔너리에 {포켓몬 이름 : 번호}, {번호 : 포켓몬 이름} 값을 저장하여 물어보는 값을 찾는것이다.

 

또한 isdigit()는 string 클래스에 있는 메서드로 

문자열이 숫자로만 이루어져있는지 확인하는 함수이다.

모든 문자가 숫자로만 이루어져있으면 True를 반환하고, 문자가 존재하면 False를 반환한다.

 

 

 

 

import sys
input = sys.stdin.readline

n,m = map(int,input().split())
dict = {}

for num in range(1,n+1):
    po =input().rstrip()
    dict[num] = po
    dict[po] = num

for i in range(m):
    ans=input().rstrip()
    if ans.isdigit():
        print(dict[int(ans)])
    else:
        print(dict[ans])

시간이 엄청나게 단축된다.

import sys
input = sys.stdin.readline().rstrip()

를 사용하면서 주의할 점은 .rstrip()을 사용하는 것. (문자열 입력받을때 사용)

이것을 이용하지 않으면 타입오류가 뜬다. 

=> sys라이브러리의 readline()은 \n도 받으므로, 이 공백문자를 제거하는 역할을 rstrip()이 하는것이다!!

'백준' 카테고리의 다른 글

백준 7785 회사에 있는 사람  (0) 2024.10.01
백준 17219 비밀번호 찾기  (2) 2024.09.28
백준 1789 수들의 합  (1) 2024.09.26
백준 11047 동전 0  (0) 2024.09.25
백준 11723 집합  (0) 2024.09.24