접근

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

그냥 파이썬의 in list 기능을 사용하면 될 것 같지만 이분탐색 알고리즘을 이용하여 문제를 해결하였다.

  1. 먼저 주어진 상근이의 숫자 카드들을 오름차순으로 정렬하였다.
  2. 간단하게 탐색의 시작 index와 끝 index를 두고, 중간 지점을 기준으로 찾고자 하는 카드가 더 큰지 작은지를 비교해서 이분탐색을 진행하였다.

코드

N = int(input())
sang = sorted(list(map(int, input().split())))
M = int(input())
check = list(map(int, input().split()))
res = [0] * M


def binarySearch(s, e, t):
    if s == e:
        return False
    mid = (s + e) // 2
    if sang[mid] == t:
        return True
    elif t < sang[mid]:
        return binarySearch(s, mid, t)
    else:
        return binarySearch(mid + 1, e, t)


for i in range(M):
    if binarySearch(0, N, check[i]):
        res[i] = 1
    else:
        res[i] = 0

print(*res)

더 생각해 볼 것?

아니나 다를까 그냥 in 으로 탐색했더니 훨씬 빠른 속도로 결과를 얻을 수 있었다...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기