본문 바로가기
카테고리 없음

[백준] 10816번 숫자 카드2(with python)

by 윤무무 2023. 2. 2.

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

 

1. 내가 작성한 코드
from collections import Counter

n = int(input())
s_card = list(map(int, input().split()))
s_card1 = sorted(set(s_card))
cnt = Counter(s_card)
m = int(input())
total_card = list(map(int, input().split()))

for i in total_card:
  start = 0
  end = len(s_card1) - 1
  result = False
  while start <= end:
    mid = (start+end)//2
    if s_card1[mid] == i:
      result = True
      break
    elif s_card1[mid] > i:
      end = mid-1
    elif s_card1[mid] < i:
      start = mid+1
  print(cnt[s_card1[mid]] if result else 0, end = ' ')

이분 탐색을 이용해서 풀었는데, count 함수를 쓰니까 시간초과가 발생했다.

 

count 함수를 사용하면 전체 탐색을 해서 시간복잡도가 증가하기 때문인데, 생각해보니 count함수를 쓸 거면 이분 탐색을 할 필요도 없긴 하네

 

 

2. count와 Counter 차이

count()

  • 내장함수
  • 특정 원소의 개수만을 추출할 때 사용

Counter()

  • 외장함수로써, 해당 원소들의 개수를 딕셔너리 형태로 반환
  • 딕셔너리에서 원소를 접근할 때 시간 복잡도가 O(1)이기 때문에 높은 성능을 보임

댓글