[1806] 부분합

toru·2022년 9월 19일
0
// 투포인터
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
var arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let (n,target) = (p[0],p[1])
var e = 0
var sum = 0
var result = Int.max

for s in 0..<n {
    // target이 될 때까지 더해간다.
    while sum < target && e < n {
        sum += arr[e]
        e += 1
    }
    if sum >= target {
        result = min(result, e - s)
    }
    // target이내가 될 때까지 -arr[s]
    sum -= arr[s]
}
print(result == Int.max ? 0 : result)
// 완전탐색 (시간초과)
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let (n,target) = (p[0],p[1])
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
var sum = 0
var cnt = 0
var result = Int.max

for i in 0..<n{
    sum = 0
    cnt = 1
    for j in i..<n{
        sum += arr[j]
        switch true {
        case sum < target:
            cnt += 1
        case target <= sum && cnt < result:
            result = cnt
        default:
            continue
        }
    }
}
print(result)
profile
iOS

0개의 댓글