๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 2631 : ์ค„์„ธ์šฐ๊ธฐ (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 2631 : ์ค„์„ธ์šฐ๊ธฐ (Python)

adorableco 2023. 2. 6. 23:58
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

2631๋ฒˆ: ์ค„์„ธ์šฐ๊ธฐ

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

www.acmicpc.net

 

 

์ฝ”๋“œ

n = int(input())
array = [0] * n
dp = [1] * n

for i in range(n):
    array[i] = int(input())

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

 

 

ํ’€์ด

 

๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ์„ธ์šฐ๊ธฐ ์œ„ํ•ด ์˜ฎ๊ธฐ๋Š” ํ•™์ƒ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ˜„์žฌ ๋ฐฐ์—ด์—์„œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ํ•™์ƒ ์ˆ˜๊ฐ€ ๋ช‡๋ช…์ธ์ง€ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

โ†’ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ํ•™์ƒ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋‚˜๋จธ์ง€ ํ•™์ƒ๋“ค๋งŒ ์˜ฎ๊ธฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ '์ˆœ์„œ๋Œ€๋กœ' ๋ž€ ์ˆซ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ์ด๋ฏ€๋กœ LIS(๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด)๋ฅผ ์ฐพ์•„์„œ ์ „์ฒด ํ•™์ƒ ์ˆ˜์—์„œ LIS ๋ฅผ ๋นผ์ฃผ๋ฉด ์ •๋‹ต์ด ๋œ๋‹ค. 

 

LIS(Longest Increasing Subsequence)

  • ์ ํ™”์‹ : ๋ชจ๋“  0 โ‰ค j < i ์— ๋Œ€ํ•˜์—ฌ, D[i] = max(D[i], D[j]+1) if array[j] < array[i] 
๋ฐ˜์‘ํ˜•