728x90
[파이썬] 백준 10815 : 숫자 카드 1
https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
실버 4
정렬, 이분 탐색
코드
import sys
input = sys.stdin.readline
def bs(x, key, ps, pl):
while True:
pc = (ps + pl) // 2
if ps > pl:
return 0
elif x[pc] == key:
return 1
elif x[pc] < key:
ps = pc + 1
elif x[pc] > key:
pl = pc - 1
N = int(input())
cards = sorted(list(map(int, input().split())))
M = int(input())
candidate = list(map(int, input().split()))
ps = 0
pl = len(cards) - 1
for i in range(M):
print(bs(cards, candidate[i], ps, pl), end = ' ')
굉장히 기본적인 이분 탐색 문제였다. 숫자 카드 2를 풀기 전에 먼저 풀었으면 더 좋았을 것이다.
검색해야 할 리스트의 중간 인덱스에 접근하여 찾아야 할 값이 어디 있는지에 따라 검색 범위를 좁혀간다.
단 하나라도 발견되면 바로 반복문을 빠져나와 1을 출력할 수 있도록 하고, 끝까지 찾지 못하면 ps가 pl을 초과하면서 0을 출력하고 반복문을 빠져나오도록 한다.
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[파이썬] 백준 1874 : 스택 수열 (0) | 2022.02.26 |
---|---|
[파이썬] 백준 11866 : 요세푸스 문제 0 (0) | 2022.02.25 |
[파이썬] 백준 10816 : 숫자 카드2 (0) | 2022.02.23 |
[파이썬] 백준 4949 : 균형 잡힌 세상 (0) | 2022.02.22 |
[파이썬] 백준 9012 : 괄호 (0) | 2022.02.22 |