๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
5๏ธโƒฃ CS/Algorithm

[Swift Algorithm Note] ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด (feat. DP)

by seolhee2750 2021. 8. 28.

์˜ค๋Š˜์€ ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด (LIS)์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ คํ•œ๋‹ค.

LIS๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ง€๋งŒ, ๊ทธ ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ DP๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

(DP์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ์š”๊ธฐ๐Ÿ‘‡๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

2021.08.28 - [๐Ÿ“ Algorithm Note/๐Ÿ” with Swift] - [Swift Algorithm Note] ๋™์  ๊ณ„ํš๋ฒ• (feat. Fibonacci)

 

[Swift Algorithm Note] ๋™์  ๊ณ„ํš๋ฒ• (feat. Fibonacci)

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€,, ๋„์ €ํžˆ ์•ˆํ’€๋ฆฌ๋Š” ๋ฌธ์ œ๋ฅผ ๋งž๋‹ฅ๋œจ๋ฆฌ๊ณ .. ์•Œ๊ณ ๋ณด๋‹ˆ LIS๋ผ๋Š” ํ’€์ด ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๊ทผ๋ฐ LIS๋Š” DP(๋™์  ๊ณ„ํš๋ฒ•)์„ ์‚ฌ์šฉํ•ด์•ผ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•˜๋”๋ผ.. ๋”ฐ๋ผ์„œ ์˜ค๋Š˜

seolhee2750.tistory.com

 

๐Ÿ“Ž  ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด (LIS)

์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์€ ๋ง ๊ทธ๋Œ€๋กœ, ์–ด๋– ํ•œ ์ˆ˜์—ด ์•ˆ์—์„œ ๊ฐ€์žฅ ๊ธด! ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜์—ด์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผํ•  ์ ์€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜๋“ค์ด ์—ฐ์†ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.๐Ÿ’ฅ

 

์˜ˆ๋ฅผ ๋“ค์–ด [1, 3, 2, 4, 6, 5] ์ˆ˜์—ด์—์„œ์˜ LIS๋Š” [1, 2, 4, 6]์œผ๋กœ, ๊ธธ์ด๊ฐ€ 4์ธ ์ˆ˜์—ด์ด๋‹ค.

์œ„์™€๊ฐ™์ด LIS๋Š” ์—ฐ์†ํ•˜๊ฑฐ๋‚˜, ํ˜น์€ ์—ฐ์†ํ•˜์ง€ ์•Š๋Š” ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜๋“ค์˜ ์ˆ˜์—ด์„ ๋งํ•œ๋‹ค.

 

์ด LIS๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ณ„๋กœ ๋‚˜๋ณด๋‹ค ์ž‘์€, ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜์—ด์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์ฐพ์•„์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ

์™„์ „ํƒ์ƒ‰์œผ๋กœ๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๊ฒŒ๋œ๋‹ค.ใ…œ

๋”ฐ๋ผ์„œ ๊ทธ ์ฒซ ๋ฒˆ์งธ ํ•ด๊ฒฐ์ฑ…์ด ๋ฐ”๋กœ DP๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

(๋‘ ๋ฒˆ์งธ๋กœ๋Š” ์ด๋ถ„ํƒ์ƒ‰์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ๊ทธ๊ฑด ๋‹ค์Œ์— ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.)


๐Ÿ“Ž  DP๋กœ LIS ๊ตฌํ•˜๊ธฐ

๋žœ๋ค์œผ๋กœ ๋‚˜์—ด๋œ ํ•œ ์ˆ˜์—ด์—์„œ LIS๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.

์•„๋ž˜์˜ ์˜ˆ์ œ๊ฐ€ DP๋กœ LIS๋ฅผ ๊ตฌํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํ˜•ํƒœ์ด๋‹ค.

 

๐Ÿ“Œ ์˜ˆ์ œ

import Foundation

let permu = [1, 3, 2, 5, 4, 6]
var count = [Int]()
var max = 1

for i in 0..<permu.count {
    count.append(1)
    
    for j in 0..<count.count {
        if permu[j] < permu[i] && count[i] <= count[j] { count[i] = count[j]+1 }
    }
    
    if max < count[i] { max = count[i] }
}

print(max)

๋ณ€์ˆ˜ ์„ค๋ช…

  • permu : ์ž…๋ ฅ ์ˆ˜์—ด
  • count : ์ž…๋ ฅ ์ˆ˜์—ด์˜ ์š”์†Œ๋งˆ๋‹ค ํ•ด๋‹น ์š”์†Œ๊นŒ์ง€์˜ ์ตœ์žฅ ์ˆ˜์—ด์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
  • max : count ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ์ตœ์žฅ ์ˆ˜์—ด์˜ ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜

์ฝ”๋“œ ์„ค๋ช…

  • permu ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•ด์ฃผ๊ธฐ ์œ„ํ•œ 2์ค‘ for๋ฌธ์„ ์‚ฌ์šฉ
  • ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ๋จผ์ € count ๋ฐฐ์—ด์— 1์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค. 
    ์ž๊ธฐ ์ž์‹  ์™ธ์— ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜๊ฐ€ ์—†์„์ง€๋ผ๋„(ex. 1, 2, 7, 3), ์ตœ์†Œํ•œ ์ž๊ธฐ ์ž์‹ ์„ ๋‹ด์€
    ๊ธธ์ด 1์˜ ์ˆ˜์—ด์€ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์œผ๋กœ 1์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
  • 1์„ ์ถ”๊ฐ€ํ•œ count ๋ฐฐ์—ด์˜ ๊ธธ์ด๋งŒํผ ํ•˜์œ„ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•ด์ฃผ๋Š”๋ฐ,
    ์šฐ์„  permu ๋ฐฐ์—ด์—์„œ j์œ„์น˜์˜ ์ˆ˜๊ฐ€ i์œ„์น˜ ์š”์†Œ๋ณด๋‹ค ์ž‘์€์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์ž‘๋‹ค๋ฉด count์— ์ €์žฅํ•ด๋‘” j ๋ฒˆ์งธ ์š”์†Œ์™€ i ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋น„๊ตํ•˜๋Š”๋ฐ,
    i ๋ฒˆ์งธ ์š”์†Œ, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ count์— ์ถ”๊ฐ€ํ•œ ๋งˆ์ง€๋ง‰ ์š”์†Œ์ธ 1์ด count[j]๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด
    i ๋ฒˆ์งธ ์š”์†Œ๋Š” j ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๊ฐ€์ง€๋Š” ์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด ๊ฐœ์ˆ˜์— 1์„ ๋”ํ•œ ๋งŒํผ
    ์ตœ์žฅ ์ฆ๊ฐ€์ˆ˜์—ด์„ ๊ฐ€์ง„๋‹ค๋Š” ๋œป์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„ ์‹œํ–‰์„ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด์„ ๊ฐ–๋Š” ์š”์†Œ์™€ ๊ทธ ๊ธธ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘€ ์ •๋ฆฌ

DP๋ฅผ ์ด์šฉํ•˜์—ฌ LIS๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ดํ•ดํ•˜๊ณ , ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ–ˆ๋‹ค.

 

๊ณต๋ถ€ํ•˜๊ณ  ๋‚˜๋‹ˆ ์‰ฌ์šด ๊ฐœ๋…์ธ๋“ฏํ•˜์ง€๋งŒ,

๋ชฐ๋ž์„ ๋•Œ๋Š” ์ •๋ง ๋ช‡๋‚  ๋ฉฐ์น  ๊ณ ๋ฏผํ•ด๋„ ๋– ์˜ค๋ฅด์งˆ ์•Š์•˜๋‹ค.ใ…œ

๊ด€๋ จ ๋ฌธ์ œ๋“ค์„ ๋งŽ์ด ํ’€๋ฉฐ ์ตํ˜€์•ผ๊ฒ ๋‹ค.

 

๐Ÿ’ฅ ์ถ”๊ฐ€๋กœ, DP๋กœ LIS๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์€ ์—ฌ๋Ÿฌ๋ถ„๊ป˜,, ์ด ๋ฌธ์ œ๋ฅผ,,

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

 

1965๋ฒˆ: ์ƒ์ž๋„ฃ๊ธฐ

์ •์œก๋ฉด์ฒด ๋ชจ์–‘์˜ ์ƒ์ž๊ฐ€ ์ผ๋ ฌ๋กœ ๋Š˜์–ด์„œ ์žˆ๋‹ค. ์ƒ์ž๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๋Š”๋ฐ, ์•ž์— ์žˆ๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๊ฐ€ ๋’ค์— ์žˆ๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์œผ๋ฉด, ์•ž์— ์žˆ๋Š” ์ƒ์ž๋ฅผ ๋’ค์— ์žˆ๋Š” ์ƒ์ž ์•ˆ์— ๋„ฃ์„ ์ˆ˜๊ฐ€

www.acmicpc.net

 

๋Œ“๊ธ€