Problem Solving/[ํ•ญํ•ด99] TIL

99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋”” 31์ผ์ฐจ / DP(๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

geum 2024. 11. 27. 21:41

โœ๏ธ ๋ฌธ์ œ

[๋ฐฑ์ค€/BOJ] 2631๋ฒˆ: ์ค„์„ธ์šฐ๊ธฐ(https://www.acmicpc.net/problem/2631)

 

KOI ์–ด๋ฆฐ์ด์ง‘์—๋Š” N๋ช…์˜ ์•„์ด๋“ค์ด ์žˆ๋‹ค. ์˜ค๋Š˜์€ ์†Œํ’์„ ๊ฐ€๋Š” ๋‚ ์ด๋‹ค. ์„ ์ƒ๋‹˜์€ 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€์žˆ๋Š” ๋ฒˆํ˜ธํ‘œ๋ฅผ ์•„์ด๋“ค์˜ ๊ฐ€์Šด์— ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค. ์„ ์ƒ๋‹˜์€ ์•„์ด๋“ค์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋ชฉ์ ์ง€๊นŒ์ง€ ๋ฒˆํ˜ธ์ˆœ์„œ๋Œ€๋กœ ์ผ๋ ฌ๋กœ ์„œ์„œ ๊ฑธ์–ด๊ฐ€๋„๋ก ํ•˜์˜€๋‹ค. ์ด๋™ ๋„์ค‘์— ๋ณด๋‹ˆ ์•„์ด๋“ค์˜ ๋ฒˆํ˜ธ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ ์ƒ๋‹˜์€ ๋‹ค์‹œ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šฐ๊ธฐ ์œ„ํ•ด์„œ ์•„์ด๋“ค์˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„์ด๋“ค์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์น˜๋ฅผ ์˜ฎ๊ธฐ๋Š” ์•„์ด๋“ค์˜ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 7๋ช…์˜ ์•„์ด๋“ค์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„œ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

 

3 7 5 2 6 1 4

 

์•„์ด๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šฐ๊ธฐ ์œ„ํ•ด, ๋จผ์ € 4๋ฒˆ ์•„์ด๋ฅผ 7๋ฒˆ ์•„์ด์˜ ๋’ค๋กœ ์˜ฎ๊ฒจ๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๊ฐ€ ๋œ๋‹ค.

 

3 7 4 5 2 6 1

 

์ด์ œ, 7๋ฒˆ ์•„์ด๋ฅผ ๋งจ ๋’ค๋กœ ์˜ฎ๊ธด๋‹ค.

 

3 4 5 2 6 1 7

 

๋‹ค์Œ 1๋ฒˆ ์•„์ด๋ฅผ ๋งจ ์•ž์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

 

1 3 4 5 2 6 7

 

๋งˆ์ง€๋ง‰์œผ๋กœ 2๋ฒˆ ์•„์ด๋ฅผ 1๋ฒˆ ์•„์ด์˜ ๋’ค๋กœ ์˜ฎ๊ธฐ๋ฉด ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋œ๋‹ค.

 

1 2 3 4 5 6 7

 

์œ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋‘ 4๋ช…์˜ ์•„์ด๋ฅผ ์˜ฎ๊ฒจ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šด๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ 3๋ช…์˜ ์•„์ด๋งŒ์„ ์˜ฎ๊ฒจ์„œ๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, 4๋ช…์„ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ์•„์ด๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค.

N๋ช…์˜ ์•„์ด๋“ค์ด ์ž„์˜์˜ ์ˆœ์„œ๋กœ ์ค„์„ ์„œ ์žˆ์„ ๋•Œ, ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์˜ฎ๊ฒจ์ง€๋Š” ์•„์ด์˜ ์ตœ์†Œ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿค– ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

๐Ÿง ๋‚œ์ด๋„/์†Œ์š” ์‹œ๊ฐ„

โœ… ๋‚œ์ด๋„: solved.ac ๊ธฐ์ค€ G4

โœ… ์†Œ์š” ์‹œ๊ฐ„: ์ธก์ • X

โœ… ๊ถŒ์žฅ ์‹œ๊ฐ„: 1์‹œ๊ฐ„ 30๋ถ„

 

๐Ÿ’ก ํ’€์ด

1) ๋ฌธ์ œ ์ดํ•ด

์–ด์ œ ์˜ฌ๋ ธ๋˜ '์ƒ์ž ๋„ฃ๊ธฐ' ๋ฌธ์ œ์™€ ๋™์ผํ•˜๊ฒŒ LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•œ ๋ฌธ์ œ๋‹ค.

 

DP ํ…Œ์ด๋ธ” ๋ฐ ์ ํ™”์‹ ์ •์˜๋Š” '๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด' ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์™€ ๊ฐ™์ง€๋งŒ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์กฐ๊ธˆ ์ƒ๊ฐ์„ ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด ์•„๋ž˜์—์„œ ๊ทธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋งŒ ์กฐ๊ธˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

2) ์ „์ฒด ์ฝ”๋“œ

N = int(input())

children = []

for _ in range(N):
    children.append(int(input()))

DP = [1]*N

for i in range(N):
    for j in range(i):
        if children[i] > children[j]:
            DP[i] = max(DP[i], DP[j]+1)

print(N-max(DP))

 

3) ์ •๋‹ต ์ถœ๋ ฅ ๊ณผ์ •

print(N-max(DP))

 

  • N-max(DP)
    • ์ ํ™”์‹์€ '์ฃผ์–ด์ง„ ์ˆ˜์—ด์˜ i๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ์ด์ „์˜ j๋ฒˆ์งธ ์š”์†Œ๋ณด๋‹ค ํด ๋•Œ, DP[i]์™€ DP[j]+1 ์ค‘ ํฐ ๊ฐ’์œผ๋กœ DP[i]๋ฅผ ๊ฐฑ์‹ ํ•˜์—ฌ LIS๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ'์„ ์˜๋ฏธํ•œ๋‹ค.
    • ์ด ๊ณผ์ •์ด ๋๋‚œ ํ›„์— ๋‚˜์˜จ max(DP) = ์ฃผ์–ด์ง„ ์ˆ˜์—ด์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” LIS
    • ์ค„์„ธ์šฐ๊ธฐ ๋ฌธ์ œ์—์„œ ํ•™์ƒ๋“ค์˜ ์ด๋™์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์•Œ๋งž์€ ์ž๋ฆฌ์— ์„  ํ•™์ƒ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ์žก์œผ๋ฉด ๋œ๋‹ค.
      1. ์ž๊ธฐ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐ€์•ผ ํ•˜๋Š” ํ•™์ƒ๋“ค์„ ์•Œ๋งž์€ ์ž๋ฆฌ์— ์„  ํ•™์ƒ๋“ค ์‚ฌ์ด์— ์ ์ ˆํžˆ ๋ผ์›Œ์ฃผ๋ฉด ํ•™์ƒ๋“ค์˜ ์ด๋™์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ!

 

4) ์–ด๋ ค์› ๋˜ ์ /๋ฐฐ์šด ์ 

๐Ÿšจ ์–ด๋ ค์› ๋˜ ์ 

  • ์—†์Œ

โ— ๋ฐฐ์šด ์ 

  • LIS๋ฅผ ์‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด๊ถ๋ฌด์ง„ํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.