λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
3️⃣ Swift/Problem Solving

[Swift Algorithm] μƒμžλ„£κΈ° BOJ #1965

by seolhee2750 2021. 8. 28.
문제 μ„€λͺ…

μ •μœ‘λ©΄μ²΄ λͺ¨μ–‘μ˜ μƒμžκ°€ μΌλ ¬λ‘œ λŠ˜μ–΄μ„œ μžˆλ‹€. μƒμžλ§ˆλ‹€ 크기가 μ£Όμ–΄μ Έ μžˆλŠ”λ°, μ•žμ— μžˆλŠ” μƒμžμ˜ 크기가 뒀에 μžˆλŠ” μƒμžμ˜ 크기보닀 μž‘μœΌλ©΄, μ•žμ— μžˆλŠ” μƒμžλ₯Ό 뒀에 μžˆλŠ” μƒμž μ•ˆμ— 넣을 μˆ˜κ°€ μžˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•žμ—μ„œλΆ€ν„° μˆœμ„œλŒ€λ‘œ 크기가 (1, 5, 2, 3, 7)인 5개의 μƒμžκ°€ μžˆλ‹€λ©΄, 크기 1인 μƒμžλ₯Ό 크기 5인 μƒμžμ— λ„£κ³ , λ‹€μ‹œ 이 μƒμžλ₯Ό ν¬κΈ° 7인 μƒμž μ•ˆμ— 넣을 수 μžˆλ‹€. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ μƒμžλ₯Ό 넣을 수 μžˆλŠ” 방법은 μ—¬λŸ¬ 가지가 μžˆμ„ 수 μžˆλ‹€. μ•žμ˜ μ˜ˆμ—μ„œ μ°¨λ‘€λŒ€λ‘œ 크기가 1, 2, 3, 7인 μƒμžλ₯Ό μ„ νƒν•˜λ©΄ 총 4개의 μƒμžκ°€ ν•œ 개의 μƒμžμ— λ“€μ–΄κ°€κ²Œ λœλ‹€.

μƒμžμ˜ 크기가 μ£Όμ–΄μ§ˆ λ•Œ, ν•œ λ²ˆμ— 넣을 수 μžˆλŠ” μ΅œλŒ€μ˜ μƒμž 개수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

파일의 첫 번째 쀄은 μƒμžμ˜ 개수 n (1 ≤ n ≤ 1000)을 λ‚˜νƒ€λ‚Έλ‹€. 두 번째 μ€„μ—λŠ” 각 μƒμžμ˜ 크기가 μˆœμ„œλŒ€λ‘œ 주어진닀. μƒμžμ˜ ν¬κΈ°λŠ” 1,000을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

 

좜λ ₯

첫째 쀄에 ν•œ 쀄에 넣을 수 μžˆλŠ” μ΅œλŒ€μ˜ μƒμž 개수λ₯Ό 좜λ ₯ν•œλ‹€.

 

μž…μΆœλ ₯ 예제

μž…λ ₯

8
1 6 2 5 7 3 5 6

좜λ ₯

5

 

λ‚΄ 문제 풀이
import Foundation

var n = Int(readLine()!)!
var box = readLine()!.split(separator: " ").map({Int(String($0))!})
var count = [Int]()
var max = 1

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

print(max)

이 λ¬Έμ œλŠ” LIS 문제둜, 거의 λ™μΌν•œ 예제 μ„€λͺ…을 이전 κ²Œμ‹œκΈ€μ—μ„œ μž‘μ„±ν–ˆμœΌλ―€λ‘œ λŒ€μ²΄ν•˜κ² λ‹€.

πŸ‘‰ https://seolhee2750.tistory.com/109

 

[Swift Algorithm Note] 졜μž₯ 증가 λΆ€λΆ„ μˆ˜μ—΄

μ˜€λŠ˜μ€ 졜μž₯ 증가 λΆ€λΆ„ μˆ˜μ—΄ (LIS)에 λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄λ €ν•œλ‹€. LISλ₯Ό κ΅¬ν•˜λŠ” 방법은 μ—¬λŸ¬κ°€μ§€μ§€λ§Œ, κ·Έ μ€‘μ—μ„œλ„ κ°€μž₯ κ°„νŽΈν•œ DPλ₯Ό μ΄μš©ν•œ 방법을 μ†Œκ°œν•œλ‹€. (DP에 λŒ€ν•΄ κΆκΈˆν•˜μ‹  뢄듀은 μš”κΈ°πŸ‘‡λ₯Ό μ°Έκ³ 

seolhee2750.tistory.com

 

πŸ’‘ ν”Όλ“œλ°±
  • LISλ₯Ό κ΅¬ν•˜λŠ” λŒ€ν‘œμ μΈ 문제인 것 κ°™μ•„μ„œ DP, LIS κ³΅λΆ€ν•˜κΈ° 쒋은 문제인 것 κ°™λ‹€.

 


 

문제

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

λŒ“κΈ€