본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #1620

by 생각하는 이상훈 2023. 1. 26.
728x90

#1620


List 이용한 풀이

import sys
input = sys.stdin.readline

n, m = map(int,input().split())

pkm_list=[]
for i in range(n):
    pkmon=input()
    pkm_list.append(pkmon)

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

처음에는 list를 이용하여 해결하려고 했다. 우선 포켓몬들을 입력받고 문제가 포켓몬을 물어보면 list에 존재할 것이니 그 인덱스를 찾아서 1을 더해서 번호를 출력해주고 번호를 물어보는 경우에는 list에 존재하는 내용이 아닐테니 해당번호에서 1을 빼서 적절한 인덱스로 조정하여 해당 값을 출력해주는 방식을 이용했다.

그러나 시간초과가 발생하였다. 번호가 입력되는 경우와 포켓몬 이름이 입력되는 경우를 구분하여 출력하는 과정에서 시간이 오래 걸린 것으로 예상된다.


Dictionary 이용한 풀이

import sys
input = sys.stdin.readline

n, m = map(int,input().split())

pkm_list={}                     #딕셔너리 타입을 이용하여 포켓몬 도감 구성

for i in range(1, n+1):         #n개의 포켓몬을 도감에 기록
    pkmon = input().rstrip()    #우측 공백 제거
    #key로 value를 찾는 경우와 value로 key를 찾는 경우가 모두 존재하니 두가지 방향으로 저장
    pkm_list[i] = pkmon         
    pkm_list[pkmon] = i

for i in range(m):              #m개의 문제 풀이
    ans = input().rstrip()      #우측 공백 제거
    if ans.isdigit():           #ans string이 숫자로만 구성되어있는 경우
        print(pkm_list[int(ans)])   #ans를 integer type으로 바꿔주고 조사하여 value출력
    else:
        print(pkm_list[ans])        #ans를 string type 그대로 조사하여 key출력

포켓몬 리스트를 dictionary로 저장하는 것 뿐만 아니라 코드 개선과 몇몇 학습 포인트가 있다.

우선 key와 value 둘중 하나로 조사하는 것이 아니라 두가지가 혼용되어 조사를 하는 경우에 두가지 방향으로 모두 저장해두면 key에서 두가지 경우를 조사하면 모두 적절한 답을 출력해낼 수 있다.

다음으로 list를 이용한 코드에서는 ans가 string으로 input이 되어서 int로 바꾸는 경우를 복잡하게 따졌는데 isdigit()함수를 이용하면 string이 숫자로만 구성되었는지 편하게 알 수 있다.

새로운 코드로 제출하니 시간초과가 발생하지 않았다.


 

728x90

'Sketch (Programming Language) > Python' 카테고리의 다른 글

Baekjoon Training #9461  (2) 2023.01.29
Baekjoon Training #1446  (0) 2023.01.27
Baekjoon Training #15650  (0) 2023.01.21
Baekjoon Training #2751  (0) 2023.01.21
Baekjoon Training #15649  (0) 2023.01.15