https://www.acmicpc.net/problem/10815
# 백준 10815 숫자 카드
import sys
n = int(sys.stdin.readline())
hand_card = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
one_hot_list = [0] * m
for index, number in enumerate(num):
if number in hand_card:
one_hot_list[index] = 1
for i in one_hot_list:
print(i, end=' ')
첫 시도 입니다.
확인할 숫자가 있는 리스트와 크기가 같고, 인수가 모두 0인 리스트를 만들고
상근이가 그 숫자를 가지고 있으면 0인 값을 1로 바꿔주는 방법을 사용했습니다.
근데 이렇게 푸니까 시간 초과가 뜹니다.
그래서 딕셔너리를 이용해 풀어봤더니 통과했습니다.
import sys
N = int(sys.stdin.readline())
hand_card = list(map(int, sys.stdin.readline().split()))
M = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
num_dict = {}
for i in range(len(hand_card)):
num_dict[hand_card[i]] = 0
for j in range(M):
if num[j] not in num_dict:
print(0, end=' ')
else:
print(1, end=' ')
위와 똑같지만 one_hot_list가 딕셔너리로 바뀌니 통과합니다. 역시 딕셔너리가 속도는 빠른 것 같습니다.
그리고 또 이것저것 하다가 알아낸건데
리스트를 이용해도 통과하는 풀이가 있었습니다.
import sys
n = int(sys.stdin.readline())
hand_card = set(map(int, sys.stdin.readline().split()))
# hand_card = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
for i in num:
if i in hand_card:
print(1, end=' ')
else:
print(0, end=' ')
이건데 hand_card부분을 list로 하면 시간초과고 set으로 하면 통과입니다... 신기하네요
이번에 알게 된 것은
- 속도는 딕셔너리
- 만약 순서가 상관없고 중복이 있으면 안된다? -> 리스트보다는 집합(set)을 이용하기
정도가 되겠습니다.
'알고리즘 > 백준' 카테고리의 다른 글
[Python] 백준 파이썬 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.09.28 |
---|---|
[Python] 백준 파이썬 14425 문자열 집합 (0) | 2022.09.27 |
[Python] 백준 파이썬 1436 영화감독 숌 (1) | 2022.09.25 |
[Python] 백준 파이썬 1018 체스판 다시 칠하기 (1) | 2022.09.24 |
[Python] 백준 파이썬 7568 덩치 (1) | 2022.09.23 |