| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 128 MB | 199534 | 60748 | 40249 | 29.898% |
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
5
4 1 5 2 3
5
1 3 7 9 5
1
1
0
0
1
N = int(input())
N_list = list(map(int,input().split()))
M = int(input())
M_list = list(map(int,input().split()))
dic = dict.fromkeys(N_list, 1)
for x in M_list:
if x in dic:
print(1)
else:
print(0)
백준 사이트의 코딩테스트는 프로그래머스와 달리 input값을 받는 인자를 따로 지정해주어야 한다. 따라서 위의 네 줄은 N, N_list, M, M_list 네가지 input값을 받는 구문으로 작성하였고, 아래 여섯 줄이 실제 문제가 실행되는 구문이다.
위를 다시 말하면 dictionary의 경우 각각의 key값은 중복되지 않으며, 주소값을 지정하는 형식이다. 따라서 이 문제의 경우 리스트에서 이중 for문을 돌릴때 발생하는 시간초과 문제를 dictionary 자료형을 활용해서 해결할 수 있다. (M_list에 있는 값을 하나하나씩 빼와서 만약 지정한 딕셔너리에 값이 존재할 경우 print(1)을, 없을 경우 print(2)를 실행)
앞으로 코테 문제를 풀 때 리스트에서 for문을 돌리는 방식 대신 딕셔너리 형태를 활용하는 문제 풀이 방식으로 조금 더 풀어봐야겠다 !!