λ°±μ€€ - μ €μšΈ(Swift)

2022. 10. 27. 11:53ㆍAlgorithm

λ°±μ€€ - μ €μšΈ(Swift)

 

 

 λ¬Έμ œ μ„€λͺ…

 

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

 

2437번: μ €μšΈ

ν•˜λ‚˜μ˜ μ–‘νŒ” μ €μšΈμ„ μ΄μš©ν•˜μ—¬ 물건의 무게λ₯Ό μΈ‘μ •ν•˜λ €κ³  ν•œλ‹€. 이 μ €μšΈμ˜ μ–‘ νŒ”μ˜ λμ—λŠ” λ¬Όκ±΄μ΄λ‚˜ μΆ”λ₯Ό μ˜¬λ €λ†“λŠ” μ ‘μ‹œκ°€ 달렀 있고, μ–‘νŒ”μ˜ κΈΈμ΄λŠ” κ°™λ‹€. λ˜ν•œ, μ €μšΈμ˜ ν•œμͺ½μ—λŠ” μ €μšΈμΆ”λ“€λ§Œ 놓

www.acmicpc.net

 

 λ‚˜μ˜ 풀이

 

이 문제의 첫번째 접근은 동떨어진 μˆ«μžλŠ” μ œμ™Έν•΄λ„ λœλ‹€λŠ” 것이닀.

예λ₯Ό λ“€μ–΄ 1, 2, 3, 200μ΄λΌλŠ” μˆ«μžκ°€ μžˆμ„λ•Œ 200을 μ œμ™Έν•˜κ³  λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ μ΅œμ†Œκ°’μ€ 7이닀.

1, 2, 3, 4, 200의 κ²½μš°μ—λ„ 200을 μ œμ™Έν•˜κ³  λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ μ΅œμ†Œκ°’μ€ 11이닀. 

 

그리고 μ΄λ ‡κ²Œ μ˜ˆμ‹œλ₯Ό λ³΄λ©΄μ„œ 또 ν•˜λ‚˜ μ•Œκ²Œλœ 것이 μžˆλŠ”λ° 맨 μ•žμžλ¦¬λΆ€ν„° λˆ„μ ν•œ κ°’λ“€ + 1이 μ΅œμ†Œκ°’μ΄ λ˜λŠ” 것이닀.

 

그럼 1, 2, 5의 μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄μž.

이 μˆ˜λ“€μ˜ λ§Œλ“€ 수 μžˆλŠ” μ΅œμ†Œκ°’μ€ 4이닀. λ§Œμ•½ 1, 2, 4κ°€ μ™”λ‹€λ©΄ 8이 λ˜μ—ˆμ„ 것이닀.(1~8κΉŒμ§€ μ „λΆ€ λ§Œλ“€ 수 μžˆλ‹€.)

즉 λˆ„μ ν•©+1κΉŒμ§€λŠ” λ§Œλ“€ 수 μžˆλŠ” μˆ˜λ“€μ΄κ³  λˆ„μ ν•©+2κ°€ λœλ‹€λ©΄ λˆ„μ ν•©+1을 κ΅¬ν•˜μ§€ λͺ»ν•˜κΈ° 떄문에 이 뢀뢄이 breakμ‹œμ μ΄ λ˜λŠ” 것이닀.

 

import Foundation

let n = Int(readLine()!)!
var arr = readLine()!.components(separatedBy: " ").map{Int($0)!}
arr.sort(by: <)
var sum = 0 // λˆ„μ ν•©

for x in arr {
    // λˆ„μ ν•©+1보닀 큰 μˆ˜κ°€ λ‚˜μ˜¨λ‹€λ©΄ break
    if x > sum+1 {
        break
    }
    sum = sum + x
}

print(sum+1)