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

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

์ƒ๊ทผ์ด๋Š” ์ˆซ์ž ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ •์ˆ˜ M๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ์ด๋ถ„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•

์ค‘๋ณต๋œ ๊ฐ’์ด ์žˆ์„ ๋•Œ ๊ทธ ๊ฐ’์ด ์ œ์ผ ์•ž์— ์žˆ๋Š” ์œ„์น˜์™€ ์ œ์ผ ๋’ค์— ์žˆ๋Š” ์œ„์น˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , ์œ„์น˜์˜ ์ฐจ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

upperBound ๊ตฌํ•˜๊ธฐ: ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๋‹ค๊ฐ€ ํƒ์ƒ‰๊ฐ’์ด ํƒ€๊ฒŸ๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ์ž‘์€ ๊ฒฝ์šฐ lo๋ฅผ mid+1๋กœ ์„ค์ •ํ•˜๊ณ , lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๋ฉด lo๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

lowerBound ๊ตฌํ•˜๊ธฐ: ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๋‹ค๊ฐ€ ํƒ์ƒ‰๊ฐ’์ด ํƒ€๊ฒŸ๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ํฐ ๊ฒฝ์šฐ hi๋ฅผ mid-1๋กœ ์„ค์ •ํ•˜๊ณ , lo๊ฐ€ hi๋ณด๋‹ค ์ปค์ง€๋ฉด lo๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

upperBound ํ•จ์ˆ˜์™€ย  lowerBound ํ•จ์ˆ˜์˜ ์›๋ฆฌ๊ฐ€ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ์‹œ ํ•˜๋‚˜๋งŒ ๋“ค์–ด์„œ ๊ทธ๋ ค๋ณด์•˜๋‹ค.

https://blog.kakaocdn.net/dn/b3GXDp/btsEljNXKnM/93LEh7cZgp5QP82d1UIWr0/img.jpg

  1. ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ•ด์‹œ๋งต์„ ๋งŒ๋“ค๊ณ , ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ํ•ด๋‹น ์ˆซ์ž๊ฐ€ ํ•ด์‹œ์— ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์„ 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=" ")

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

์ด๋ถ„ ํƒ์ƒ‰ ์‚ฌ์šฉ: