[1182] 수들의 합

toru·2022년 9월 19일
0
// 완전탐색
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 cnt = 0

for i in 0..<n{
    var sum = 0
    for j in i..<n{
        sum += arr[j]
        switch true {
        case target > sum : continue
        case target < sum : break
        default           : cnt += 1
        }
    }
}
print(cnt)
// 투포인터
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let (n,target) = (p[0],p[1])
var (s,e) = (0,0)
var sum = arr[0]
var cnt = 0

while s < n && e < n {
    if target < sum {    // 합이 타겟을 넘으면 s포인터 +1
        sum -= arr[s]    // sum -arr[s]
        s += 1           // 그 외에 원소와의 합이 target을 넘지 않을 수 있다.
        continue
    }
    if sum == target { cnt += 1 }
    e += 1
    if e < n { sum += arr[e] }     // arr[i-1] + arr[i]
}
print(cnt)
profile
iOS

0개의 댓글