haju__log

[python][백준/BOJ] 1620번 : 나는야 포켓몬 마스터 이다솜 본문

카테고리 없음

[python][백준/BOJ] 1620번 : 나는야 포켓몬 마스터 이다솜

haju 2023. 9. 18. 17:43
반응형

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

 

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

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

www.acmicpc.net

 

첫 번째 시도

  • 도감 내용을 리스트에 저장하고
  • m만큼 반복문을 돌면서 들어오는 문제에 대해서 만약 숫자라면 l리스트[tmp-1] 값을 출력하고 
  • 만약 문제가 문자열이라면 l리스트에서 index()를 활용하여 인덱스 값+1을 출력한다고 접근함.
import sys

n,m=map(int,sys.stdin.readline().split())
l=[]
for i in range(n):
    l.append(sys.stdin.readline().strip())

for i in range(m):
    tmp=sys.stdin.readline().strip()
    if tmp.isdigit() :
        print(l[int(tmp)-1])
    else:
        print(l.index(tmp)+1)

❗  .index() 사용으로 시간초과가 나왔을 것이라 판단함

❗ dict() 를 활용하자!

❗ index()의 시간복잡도는 O(N)이고, 딕셔너리 탐색 연산은 O(1)이므로 활용을 잘해보자~ ❗

 

✅ 두 번째 시도

  • l을 리스트 대신 딕셔너리로 설정하고 반복문을 도는 인덱스인 i를 key, 도감내용을 value로 받았다.
  • m만큼 반복문을 돌면서 들어오는 문제에 대해서 만약 숫자라면 l딕셔너리[tmp-1] 값을 출력하고
  • 만약 문제가 문자열이라면 l딕셔너리에서 items()를 이용해 key 와 value값을 다 가져오고
  • 조건문을 이용해 문제와 동일한 value값의 key값을 출력하고자 접근함.
import sys

n,m=map(int,sys.stdin.readline().split())
l=dict()
for i in range(n):
    tmp=sys.stdin.readline().strip()
    l[i]=tmp
print(l)

for i in range(m):
    tmp=sys.stdin.readline().strip()
    if tmp.isdigit() :
        print(l[int(tmp)-1])
    else:
        for k,v in l.items():
            if v==tmp:
                print(k+1)

❗ 출력 초과는 처음보는데 후ㅠㅠ 찾아보니 프로그램이 너무 많은 출력을 하는 경우에 발생한다고 한다. 

❗ 미리 구해놓은 정답 파일의 크기의 2배를 넘어가면 이 결과를 받는다. (틀렸습니다와 동일함 ㅎㅎ )

 

✅ 최종코드 

  • 찾아보니 딕셔너리의 key와 value 값을 서로 바꾸어서 저장하는 방법이 있었다 !
# 딕셔너리 key와 value값 서로 바꾸기 문법

dict(map(reversed,값을 바꿀 딕셔너리.items()))
import sys

n,m=map(int,sys.stdin.readline().split())
l=dict()
for i in range(n):
    tmp=sys.stdin.readline().strip()
    l[i]=tmp

reverse_l =dict(map(reversed,l.items()))

for i in range(m):
    tmp=sys.stdin.readline().strip()
    if tmp.isdigit() :
        print(l[int(tmp)-1])
    else:
        print(reverse_l[tmp]+1)

 

✅ 딕셔너리 l과 reverse한 값인 reverse_l을 비교해보면 key와 value가 잘 바뀌어서 저장된 것을 볼 수 있다. 

반응형