Algorithm Study/Python

[백준 파이썬] #10815 숫자 카드

728x90
반응형

Silver IV

# 10815 숫자 카드

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

 

10815번: 숫자 카드

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

www.acmicpc.net

 

풀이

N = int(input())
has = list(map(int, input().split()))
has.s6ort()
M = int(input())
cards = list(map(int, input().split()))

def bs(li, target):
    start = 0
    end = len(li)-1
    while start <= end:
        mid = (start+end) // 2
        if li[mid] == target:
            return 1
        elif li[mid] < target:
            start = mid+1
        elif li[mid] > target:
            end = mid-1
    return 0

for i in cards:
    print(bs(has, i), end = ' ')

 

후기

  • 이진 탐색을 이용해야 시간 초과를 피할 수 있다. 몇차례 시도와 실패를 반복한 끝에 스스로 풀어낼 수 있었다.
  • AttributeErorr와 IndexError를 오류를 수정한 후에 정답을 맞출 수 있었다.
    AttributeError : 기준이 되는 리스트와 확인하려고하는 리스트가 뒤바뀌지 않았는지 체크해볼 것
    IndexError : 인덱스의 초깃값, 끝값에 잘못된 설정이 있었는지 확인해보자. end = len(li) 로 설정했더니 발생했었다.
  • 새로운 자료구조 이해할 때마다 시간과 노력이 배로 든다.. 좌절 안하고 열심히 해야지 (라고 말하지만 눈물 찔끔..)