Algorithm/Problems

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

공부좀하시졍 2022. 11. 18. 10:14

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

 

10815번: 숫자 카드

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

www.acmicpc.net

import sys

read = sys.stdin.readline
        
n = int(input())
cards = list(map(int, read().split()))
m = int(input())
nums = list(map(int, read().split()))
result = [0] * len(nums)

for i in range(m):
  if nums[i] in cards:
    result[i] = 1

print(result)

result 리스트를 0으로 초기화 한 후 카드가 존재하는 경우에만 값을 1로 변경해주었다. 간단하게 생각하면 시간초과가 난다.

import sys

read = sys.stdin.readline
        
n = int(input())
cards = list(map(int, read().split()))
m = int(input())
nums = list(map(int, read().split()))

cards.sort()
# binary_search
for num in nums:
  start = 0
  end = n-1
  exist = False
  while start <= end:
    mid = (start + end) // 2
    if num > cards[mid]:
      start = mid+1
    elif cards[mid] > num:
      end = mid-1
    else:
      exist = True
      break
  print(1 if exist else 0, end=' ')

이진탐색을 진행하면서 exist 변수를 이용해 True 일 때 (정수 카드가 존재할 때) 1을 출력 그렇지 않은 경우에는 0을 출력하도록 했다. 리스트를 이용해 for문 안에서 append를 사용하면 효율성이 떨어지는 것 같다....😥