Algorithm

λ°±μ€€ - ν†΅λ‚˜λ¬΄ κ±΄λ„ˆλ›°κΈ°

CheonD 2022. 11. 7. 14:34

λ°±μ€€ - ν†΅λ‚˜λ¬΄ κ±΄λ„ˆλ›°κΈ°

 

 

 λ¬Έμ œ μ„€λͺ…

 

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

 

11497번: ν†΅λ‚˜λ¬΄ κ±΄λ„ˆλ›°κΈ°

λ‚¨κ·œλŠ” ν†΅λ‚˜λ¬΄λ₯Ό μ„Έμ›Œ 놓고 κ±΄λ„ˆλ›°κΈ°λ₯Ό μ’‹μ•„ν•œλ‹€. κ·Έλž˜μ„œ N개의 ν†΅λ‚˜λ¬΄λ₯Ό μ›ν˜•μœΌλ‘œ μ„Έμ›Œ 놓고 뛰어놀렀고 ν•œλ‹€. λ‚¨κ·œλŠ” μ›ν˜•μœΌλ‘œ μΈμ ‘ν•œ μ˜† ν†΅λ‚˜λ¬΄λ‘œ κ±΄λ„ˆλ›°λŠ”λ°, μ΄λ•Œ 각 μΈμ ‘ν•œ ν†΅λ‚˜λ¬΄μ˜ 높이

www.acmicpc.net

 

 λ‚˜μ˜ 풀이

 

κ°œμΈμ μœΌλ‘œλŠ” 쑰금 μ–΄λ €μ› λ˜ λ¬Έμ œμ΄λ‹€. λ§Œμ•½ μ›ν˜•μ΄ μ•„λ‹ˆλΌλ©΄ κ°€μž₯ 적게 μ°¨μ΄λ‚˜λŠ” κ²½μš°λŠ” κ·Έλƒ₯ μ •λ ¬ν•œ μƒνƒœμ΄μ§€λ§Œ 이 λ¬Έμ œλŠ” μ›ν˜•μ΄κΈ° λ•Œλ¬Έμ— 처음과 끝이 μ—„μ²­ μ°¨μ΄λ‚˜κ²Œ λœλ‹€.

 

2 4 5 7 9λ₯Ό μ΅œμ†Œ λ‚œμ΄λ„λ‘œ λ°°μΉ˜ν–ˆμ„λ•Œ 2 5 9 7 4κ°€λ‚˜μ˜€λŠ”λ° μ΄λŠ” κ°€μš΄λ°λ‘œ 갈수둝 μ»€μ§€λŠ” μˆ«μžκ°€ λ‚˜μ˜€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

즉 κ°€μž₯ 큰 것을 κ°€μš΄λ°μ— 놓고 주변에 제일 적게 μ°¨μ΄λ‚˜λŠ” 것 λ‘κ°œλ₯Ό λ°°μΉ˜ν•˜κ³  κ·Έλ‹€μŒ 적게 μ°¨μ΄λ‚˜λŠ” 것 λ‘κ°œλ₯Ό λ°°μΉ˜ν•˜λ©΄ μ΅œμ†Œκ°€ λœλ‹€. μ™œλƒν•˜λ©΄ 이 방법이 처음과 끝을 κ°€μž₯ μž‘μ€μˆ˜λ‘œ λ°°μΉ˜ν•˜λ©΄μ„œ κ°€μš΄λ°λ‘œ 갈수둝 μ˜¬λΌκ°€κ³  κ°€μš΄λ°μ—μ„œ 끝으둜갈수둝 λ‚΄λ €κ°€κ²Œν•˜λŠ” 졜적의 ꡬ쑰이기 λ•Œλ¬Έμ΄λ‹€.

 

κ·Έλž˜μ„œ μ΄λŠ” μ •λ ¬ν•œ κ°’μ—μ„œ 제일 λ§ˆμ§€λ§‰ μˆ˜λΆ€ν„° -2μ°¨μ΄λ‚˜λŠ” 것듀 쀑 κ°€μž₯ 큰것을 λ‹΅μœΌλ‘œ λ†“μœΌλ©΄ λœλ‹€. 

 

import Foundation

let tc = Int(readLine()!)!
for _ in 0..<tc {
    let treeCnt = Int(readLine()!)!
    var trees = readLine()!.components(separatedBy:" ").map{Int($0)!}
    var result = 0
    trees.sort(by: <)
    for i in 2..<trees.count {
        result = max(result, trees[i] - trees[i-2])
    }
    print(result)
}