백준

백준 10815번

백준파이썬개발자:프로젝트골드 2024. 1. 31. 17:45
반응형
import sys

n = int(sys.stdin.readline())
n_list=list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
m_list=list(map(int, sys.stdin.readline().split()))


for i in m_list:
    if i in n_list:
        print(1)
    else:
        print(0)

위 코드는 내가 초기에 작성한 코드이다.

문제 이것이 시간 초과가 떠버렸다.

그래서 다른 사람이 어떻게 풀었는지 살펴보았다.

 

import sys

n = int(sys.stdin.readline())
n_list=list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
m_list=list(map(int, sys.stdin.readline().split()))

#--------------------------------------------------
_dict = {}  # 속도는 dictionary!
for i in range(len(n_list)):
    _dict[n_list[i]] = 0  # 아무 숫자로 mapping
#--------------------------------------------------
#print(_dict)
"""
for i in m_list:
    if i in _dict:
        print(1)
    else:
        print(0)
"""

 

코드에 표시를 해두었다.

달라진코드가 보일것이다.바로 이코드이다.

_dict = {}  # 속도는 dictionary!
for i in range(len(n_list)):
    _dict[n_list[i]] = 0  # 아무 숫자로 mapping

딕셔너리가 리스트보다 빨라서 그런것같다.

(이런데 리스트는 왜쓰는거야 넘파이보다 느리고 용량도 더차지하면서)

그래서 리스트를 딕셔녀리로 바꾸어서 출력한다.

print(_dict)을 출력해보면

{6: 0, 3: 0, 2: 0, 10: 0, -10: 0}

이렇게 나온다.

기존 n_list는 [6,3,2,10,-10]인것에 반해서 dict은 사전을 만들어주는 것이기에 키값이 필요하다.

우리는 키를 사용할것이 아니무로 0을 넣었다.

 

 

반응형