ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ด์ฝ”ํ…Œ Ch7-2] ๋ถ€ํ’ˆ ์ฐพ๊ธฐ (์ด์ง„ ํƒ์ƒ‰)

์€์ง„ 2022. 1. 23. 21:55

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ์„ค๋ช…

[์ด์ฝ”ํ…Œ 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๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  • ์ฐธ๊ณ ์‚ฌ์ดํŠธ : Python ์ด์ง„ ํƒ์ƒ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Doc

  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 = ' ')