본문 바로가기
Algorithm/문제풀이_백준

[Swift][누적합] 백준 2559번 (수열)

by Joahnee 2022. 5. 30.

요구능력

누적합

 

문제풀이

누적합의 구간의 합을 구할 수 있는지를 묻는 문제이다.

손으로 인덱스와 숫자를 적어놓고 k를 빼주면 원하는 갯수의 누적합을 구할 수 있다는걸 알게될것이다.

Int.max에 -1을 곱해준 이유는 최대값이 음수가 될 수 있는 경우를 고려해준것이다.

if i -k < -1인 경우는 구하려는 누적합의 갯수만큼 나오지 않기 때문에 처리해준것이고,

if i - k == -1인 경우는 맨처음부터 원하는 갯수인 k개만큼 나오기에 구해둔 누적합만 불러온것이다.

 

후기

최대값이 음수가 될 수 있다는점을 잘 고려하자.

 

코드

import Foundation
let nk = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = nk[0]
let k = nk[1]

var arr = readLine()!.split(separator: " ").map{Int(String($0))!}

var preFix = Array(repeating: 0, count: arr.count)
preFix[0] = arr[0]
for i in stride(from: 1, to: arr.count, by: 1){
    preFix[i] += (arr[i] + preFix[i - 1])
}

var result = Int.max * -1
for i in 0..<preFix.count{
    var sum = 0
    if i - k < -1 {continue}
    if i - k == -1{
        sum = preFix[i]
    }else{
        sum = preFix[i] - preFix[i - k]
    }
//    print(sum)
    result = max(result, sum)
}
print(result)

댓글