https://www.acmicpc.net/problem/10816
์๊ทผ์ด๋ ์ซ์ ์นด๋ N๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ ์ M๊ฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ด ์๊ฐ ์ ํ์๋ ์ซ์ ์นด๋๋ฅผ ์๊ทผ์ด๊ฐ ๋ช ๊ฐ ๊ฐ์ง๊ณ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ค๋ณต๋ ๊ฐ์ด ์์ ๋ ๊ทธ ๊ฐ์ด ์ ์ผ ์์ ์๋ ์์น์ ์ ์ผ ๋ค์ ์๋ ์์น๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ , ์์น์ ์ฐจ๋ฅผ ์ถ๋ ฅํ๋ค.
upperBound ๊ตฌํ๊ธฐ: ์ด๋ถ ํ์์ ํ๋ค๊ฐ ํ์๊ฐ์ด ํ๊ฒ๊ณผ ์ผ์นํ๊ฑฐ๋ ์์ ๊ฒฝ์ฐ lo๋ฅผ mid+1๋ก ์ค์ ํ๊ณ , lo๊ฐ hi๋ณด๋ค ์ปค์ง๋ฉด lo๋ฅผ ๋ฆฌํดํ๋ค.
lowerBound ๊ตฌํ๊ธฐ: ์ด๋ถ ํ์์ ํ๋ค๊ฐ ํ์๊ฐ์ด ํ๊ฒ๊ณผ ์ผ์นํ๊ฑฐ๋ ํฐ ๊ฒฝ์ฐ hi๋ฅผ mid-1๋ก ์ค์ ํ๊ณ , lo๊ฐ hi๋ณด๋ค ์ปค์ง๋ฉด lo๋ฅผ ๋ฆฌํดํ๋ค.
upperBound ํจ์์ย lowerBound ํจ์์ ์๋ฆฌ๊ฐ ์ ์ดํด๊ฐ ์๊ฐ์ ๊ฐ๋จํ๊ฒ ์์ ํ๋๋ง ๋ค์ด์ ๊ทธ๋ ค๋ณด์๋ค.
ํด์๋งต์ ๋ง๋ค๊ณ , ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ ํด๋น ์ซ์๊ฐ ํด์์ ์๋ ๊ฒฝ์ฐ ๊ฐ์ 1์ผ๋ก ์ค์ ํ๊ณ , ์๋ ๊ฒฝ์ฐ ๊ฐ์ 1์ ๋ํ๋ค.
์ซ์๋ฅผ ์ถ๋ ฅํ ๋ ํด๋น ์ซ์๊ฐ ํด์์ ์กด์ฌํ๋ฉด ํด์์ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ์๋ ๊ฒฝ์ฐ 0์ ์ถ๋ ฅํ๋ค.
์ด๋ถํ์ ๋ฐฉ๋ฒ
import sys
input = sys.stdin.readline
N= int(input())
cards = list(map(int, input().split()))
M= int(input())
needs = list(map(int, input().split()))
cards.sort()
def upperBound(target):
lo=0
hi=len(cards)-1
while lo<=hi:
mid=(hi+lo)//2
if cards[mid]>target:
hi=mid-1
else:
lo=mid+1
return lo
def lowerBound(target):
lo=0
hi=len(cards)-1
while lo<=hi:
mid=(hi+lo)//2
if cards[mid]>=target:
hi=mid-1
else:
lo=mid+1
return lo
for i in needs:
print(upperBound(i)-lowerBound(i), end=" ")
ํด์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
import sys
input = sys.stdin.readline
N= int(input())
cards = list(map(int, input().split()))
M= int(input())
needs = list(map(int, input().split()))
cards.sort()
count={}
for i in cards:
ย ย ย ย if i in count:
ย ย ย ย ย ย ย ย count[i]+=1
ย ย ย ย else:
ย ย ย ย ย ย ย ย count[i]=1
for i in needs:
ย ย ย ย print(count[i] if i in count else 0, end=" ")
์ด๋ถ ํ์ ์ฌ์ฉ: