728x90
이분 탐색으로 풀었는데, 다른 풀이를 보니 set를 사용한 풀이가 통과돼서 좀 황당했던 문제...
내가 문제 조건의 이해를 잘못한건가? 아니면 list보다 set를 비교 대상으로 할 때 더 빠른 건가? 잘 모르겠다.
방법 1. set
# 684ms / 119412KB
from sys import stdin, stdout
n = int(stdin.readline())
a = set(map(int, stdin.readline().split()))
m = int(stdin.readline())
b = list(map(int, stdin.readline().split()))
for i in b:
print(1,end=' ') if i in a else print(0,end=' ')
방법 2. 이분 탐색
# 2708ms / 107364KB
from sys import stdin,stdout
n = int(stdin.readline())
a = sorted(list(map(int,stdin.readline().split())))
m = int(stdin.readline())
b = list(map(int, stdin.readline().split()))
def b_search(num):
left = 0
right = n-1
while left<=right:
mid = (left+right)//2
if a[mid] == num: # 찾으면 1 리턴
return 1
elif a[mid] > num: # 상근이 카드의 중간값이 비교하는 숫자보다 크면 최소값을 높여서 비교하는 범위를 줄임
right = mid-1
else: # 상근이 카드의 중간값이 비교하는 숫자보다 작면 최대값을 낮춰서 비교하는 범위를 줄임
left = mid+1
# 끝까지 찾지 못하고 left가 right와 같거나 커지면 0 리턴
return 0
for i in b:
print(b_search(i),end=' ')
'PS > Python' 카테고리의 다른 글
[BOJ / Java] 1920 - 수 찾기 (0) | 2020.08.20 |
---|---|
[BOJ/Python] 1158 - 요세푸스 문제 (0) | 2020.07.21 |
[BOJ/Python] 10845 - 큐 (0) | 2020.07.07 |
[BOJ/Python] 10828 - 스택 (0) | 2020.07.07 |
[BOJ/Python] 10989 - 수 정렬하기 3 (0) | 2020.07.07 |
최근댓글