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
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기