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

[์ด์ฝ”ํ…Œ Ch16-34] ๋ณ‘์‚ฌ ๋ฐฐ์น˜ํ•˜๊ธฐ

์€์ง„ 2022. 4. 26. 17:51

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

[์ด์ฝ”ํ…Œ Ch16-34] ๋ณ‘์‚ฌ ๋ฐฐ์น˜ํ•˜๊ธฐ
์ด์ฝ”ํ…Œ

โœ๏ธIdea Sketch

๋ฌธ์ œ์š”์•ฝ

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


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

O(n^2)

์ด์ค‘ for๋ฌธ์œผ๋กœ ์ด์ค‘ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n^2) ์ด๋‹ค.


์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ, LIS

๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด LIS์˜ ์ „ํ˜•์ ์ธ ๋ฌธ์ œ์ด๋‹ค. ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๋งค ์ฐจ๋ก€๋งˆ๋‹ค ๊ณ„์‚ฐํ•˜์—ฌ dp ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.


โœ๏ธ๋‚ด ์†Œ์Šค์ฝ”๋“œ

  • dp ๋ฐฐ์—ด : i๋ฒˆ์งธ ๋ณ‘์‚ฌ๊ฐ€ ๋งˆ์ง€๋ง‰์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋‘๋ฒˆ์งธ for๋ฌธ์—์„œ i-1๋ฒˆ์งธ๋ถ€ํ„ฐ ์—ญ์ˆœ์œผ๋กœ ๋ณ‘์‚ฌ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ์ „ํˆฌ๋ ฅ์ด i๋ฒˆ์งธ ๋ณ‘์‚ฌ๋ณด๋‹ค ํฌ๋ฉด์„œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ตฌํ•œ ๊ฐ’์„ dp๋ฐฐ์—ด์— ๊ฐฑ์‹ ํ•œ๋‹ค.
  • i๋ฒˆ์งธ ๋ณ‘์‚ฌ๋ณด๋‹ค ์ „ํˆฌ๋ ฅ์ด ๋” ํฐ ๋ณ‘์‚ฌ๊ฐ€ ์•„์ง ๋‚˜์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ 1๋กœ ์„ค์ •ํ•œ๋‹ค.


์ „์ฒด ์ฝ”๋“œ

  import sys
  si = sys.stdin.readline

  n = int(si())
  seq = list(map(int, si().split()))
  dp = [1] + [0] * (n - 1)

  for i in range(1, n):
    for j in range(i-1, -1, -1):
      if seq[j] > seq[i]:
        dp[i] = max(dp[i], dp[j] + 1)
    if dp[i] == 0:
      dp[i] = 1

  print(n - max(dp))