Algorithm/문제풀이_백준
[Swift][누적합] 백준 2559번 (수열)
Joahnee
2022. 5. 30. 11:47
요구능력
누적합
문제풀이
누적합의 구간의 합을 구할 수 있는지를 묻는 문제이다.
손으로 인덱스와 숫자를 적어놓고 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)