๐ฉ๐ปโ๐ป๋ฌธ์ ์ค๋ช
[์ด์ฝํ
Ch7-2] ๋ถํ ์ฐพ๊ธฐ (์ด์ง ํ์)
๋๋น์ด๋ค ์ ์ ๋งค์ฅ์๋ ๋ถํ์ด N๊ฐ ์๋ค. ๊ฐ ๋ถํ์ ์ ์ ํํ์ ๊ณ ์ ํ ๋ฒํธ๊ฐ ์๋ค. ์ด๋ ๋ ์๋์ด M๊ฐ์ ์ข ๋ฅ์ ๋ถํ์ ๋๋์ผ๋ก ๊ตฌ๋งคํ๊ฒ ๋ค๋ฉฐ ๋น์ผ ๋ ๊ฒฌ์ ์๋ฅผ ์์ฒญํ๋ค. ๋๋น์ด๋ ๋๋ฅผ ๋์น์ง ์๊ณ ์๋์ด ๋ฌธ์ํ ๋ถํ M๊ฐ ์ข ๋ฅ๋ฅผ ๋ชจ๋ ํ์ธํด์ ๊ฒฌ์ ์๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ด๋ ๊ฐ๊ฒ ์์ ๋ถํ์ด ๋ชจ๋ ์๋์ง ํ์ธํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์.
์๋ฅผ ๋ค์ด ๊ฐ๊ฒ์ ๋ถํ์ด ์ด 5๊ฐ์ผ ๋ ๋ถํ ๋ฒํธ๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ํ์.
N=5
[8, 3, 7, 9, 2]
์๋์ ์ด 3๊ฐ์ ๋ถํ์ด ์๋์ง ํ์ธ ์์ฒญํ๋๋ฐ ๋ถํ ๋ฒํธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
M=3
[5, 7, 9]
์ด๋ ์๋์ด ์์ฒญํ ๋ถํ ๋ฒํธ์ ์์๋๋ก ๋ถํ์ ํ์ธํด ๋ถํ์ด ์์ผ๋ฉด yes๋ฅผ, ์์ผ๋ฉด no๋ฅผ ์ถ๋ ฅํ๋ค. ๊ตฌ๋ถ์ ๊ณต๋ฐฑ์ผ๋ก ํ๋ค.
์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ ์ N์ด ์ฃผ์ด์ง๋ค. (1<=N<=1,000,000)
- ๋์งธ ์ค์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ N๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ์ ์๋ 1๋ณด๋ค ํฌ๊ณ 1,000,000 ์ดํ์ด๋ค.
- ์ ์งธ ์ค์๋ ์ ์ M์ด ์ฃผ์ด์ง๋ค. (1<=M<=100,000)
- ๋ท์งธ ์ค์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ M๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ์ ์๋ 1๋ณด๋ค ํฌ๊ณ 10์ต ์ดํ์ด๋ค.
์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ๊ฐ ๋ถํ์ด ์กด์ฌํ๋ฉด yes๋ฅผ, ์์ผ๋ฉด no๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ ์์
5
8 3 7 9 2
3
5 7 9
์ถ๋ ฅ ์์
no yes yes
โ๏ธIdea Sketch
์๊ณ ๋ฆฌ์ฆ : ์ด์ง ํ์
์๊ฐ๋ณต์ก๋
์ ๋ ฌ๊ณผ ์ด์ง ํ์์ ์ฐ์ฐ์ ํฉํ ์ด ์๊ฐ๋ณต์ก๋๋ O((M + N)logN) ์ด๋ค.
ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ sorted()์ sort()ํจ์๋ฅผ ์ ๊ณตํ๋ค. ๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋๋ฐ, ๋ณํฉ ์ ๋ ฌ์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ํต ์ ๋ ฌ๋ณด๋ค ๋๋ฆฌ์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ ๋ณต์ก๋ O(NlogN)์ ๋ณด์ฅํ๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฒ์ ๋ถํ์ ์ ๋ ฌํ๋ ๋ฐ์ ์๊ฐ๋ณต์ก๋๋ O(NlogN)์ด๋ค.
๋ํ ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ๋ณต์ก๋๋ O(logN)์ด๋ฉฐ, ์ด์ง ํ์์ ์๋์ด ์ ์ฒญํ ๋ถํ ๊ฐ์์ธ M๋ฒ ๋งํผ ์คํํ๋ค. ๋ฐ๋ผ์ ์ด์ง ํ์ ์ฐ์ฐ์ ์๊ฐ๋ณต์ก๋๋ O(MlogN)์ด๋ค.
๋ฐ๋ผ์ ์ ๋ ฌ๊ณผ ์ด์ง ํ์์ ์ฐ์ฐ์ ํฉํ ์ด ์๊ฐ๋ณต์ก๋๋ O((M + N)logN) ์ด๋ค.
โ๏ธ๋ด ์์ค์ฝ๋
๊ฐ๊ฒ์ ๋ฌผํ ๋ฐฐ์ด store์ sorted()๋ก ์ ๋ ฌํ๋ค.
bisect ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ store์์ ์๋์ด ์๊ตฌํ ๋ฌผํ x๋ฅผ ์ฝ์ ํ ์์น ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
ํด๋น ์ธ๋ฑ์ค์ ๋ฌผํ์ด ์๋์ด ์๊ตฌํ ๋ฌผํ x์ ๋์ผํ๋ฉด yes, ๊ทธ๋ ์ง ์์ผ๋ฉด no๋ฅผ ์ถ๋ ฅํ๋ค.
import sys
import bisect
si = sys.stdin.readline
n = int(si())
store = sorted(map(int, si().split()))
m = int(si())
wish = list(map(int, si().split()))
for x in wish:
idx = bisect.bisect_left(store, x)
if store[idx] == x:
print('yes', end = ' ')
else:
print('no', end = ' ')