[백준] 1920번.수 찾기

싱숭생숭어·2023년 4월 18일
0

백준

목록 보기
1/32

문제

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초128 MB199534607484024929.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값을 받는 구문으로 작성하였고, 아래 여섯 줄이 실제 문제가 실행되는 구문이다.

딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다. 이것이 바로 딕셔너리의 가장 큰 특징이다. baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

위를 다시 말하면 dictionary의 경우 각각의 key값은 중복되지 않으며, 주소값을 지정하는 형식이다. 따라서 이 문제의 경우 리스트에서 이중 for문을 돌릴때 발생하는 시간초과 문제를 dictionary 자료형을 활용해서 해결할 수 있다. (M_list에 있는 값을 하나하나씩 빼와서 만약 지정한 딕셔너리에 값이 존재할 경우 print(1)을, 없을 경우 print(2)를 실행)

앞으로 코테 문제를 풀 때 리스트에서 for문을 돌리는 방식 대신 딕셔너리 형태를 활용하는 문제 풀이 방식으로 조금 더 풀어봐야겠다 !!

profile
공부합시당

0개의 댓글