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

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

 

백준 문제를 풀면서 위 문제를 풀 수 있는 흥미로운 방법을 찾아내어 기록합니다.

 

위 문제를 처음 봤을 때 저의 풀이입니다.

N = input()
A = list(map(int, input().split()))
M = input()
lstM = list(map(int, input().split()))

for ele in lstM:
    if ele in A: 
        print(1)
    else:
        print(0)

해당 문제를 해결하기 위해서 in 을 활용하였습니다.

위 방식은 심플하고 좋아보이지만 python3으로 해결하려고 하면 시간초과가 발생합니다. (하지만 pypy3은 괜찮아요)

 

이번에는 패스트캠퍼스 강의를 통해서 알게된 풀이 방식입니다.

 

N, A = int(input()), {i:1 for i in map(int, input().split())}
M, B = int(input()), list(map(int, input().split()))

for i in range(M):
	print(A.get(B[i],0))

위 문제의 핵심은 딕셔너리를 활용하는 것입니다. 입력 받을 때 {} 안에 for 문을 활용하여 입력값들을 딕셔너리로 받습니다. 그리고, get함수를 통해서 첫번째 인자 값이 존재하지 않는다면 2번째 인자 값을 반환하도록 합니다.

위와 같은 방식으로 딕셔너리를 활용하여 코딩할 수 있습니다.

+ Recent posts