백준 1620 Python

Heejun Kim·2022년 5월 24일
0

Coding Test

목록 보기
14/51

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

Python의 dict 자료형을 2번 이용해 문제를 풀었다.
처음에는 dict형 변수를 한개만 선언해 포켓몬 이름으로 들어왔을때 반복문을 통해 해당 value값과 동일한 숫자 키를 출력하도록 했는데, 문제 조건을 다시 확인해보니 N, M 모두 100,000보다 작거나 같은 자연수였다. 이러면 최대 N^2가 됐을 때... 시간초과가 발생할 수 있다.
그래서 숫자와 포켓몬 이름이 들어왔을 때 사용할 dict형 변수를 2개 선언해 해결했다.

오답 코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())

ill_book = {}
for n in range(N):
    ill_book[n+1] = input().strip()

for m in range(M):
    question = input().strip()
    try:
        question = int(question)
        print(ill_book[question])
    except(ValueError):
        for i in range(1, N + 1):
            if ill_book[i] == question:
                print(i)

정답 코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())

ill_book_num = {}
ill_book_name = {}
for n in range(N):
    poketmon = input().strip()
    ill_book_num[n+1] = poketmon
    ill_book_name[poketmon] = n+1

for m in range(M):
    question = input().strip()
    try:
        question = int(question)
        print(ill_book_num[question])
    except(ValueError):
        print(ill_book_name[question])

0개의 댓글