김경록의 앱 개발 여정

[Swift 백준] 21921 블로그 본문

Algorithm

[Swift 백준] 21921 블로그

Kim Roks 2025. 1. 23. 15:28

풀이 아이디어

  • 가장 일반적인 슬라이딩 윈도우로 풀이합니다
  • 단, 특이사항이 있는데 같은 구간합이 있는 경우가 몇번인지도 나태내줘야합니다
  • 매번 result = max(a,b) 로 치환하는 대신 조건문을 통해 진행합니다

자세한 풀이는 코드의 주석을 참고해주세요

풀이

let nx = readLine()!.split(separator: " ").map { Int($0)! }
let (n, x) = (nx[0], nx[1])

let input = readLine()!.split(separator: " ").map { Int($0)! }

var initialSum = input[0..<x].reduce(0, +)
var result = initialSum
var resultCount = 1

for i in x..<n {
    initialSum = initialSum - input[i - x] + input[i]
    if initialSum > result {
        result = initialSum
        resultCount = 1 // 새로운 최대값이 등장했으므로 초기화
    } else if initialSum == result {
        resultCount += 1 // 같은 최대값이 등장했으므로 증가
    }
}

if result == 0 {
    print("SAD")
} else {
    print(result)
    print(resultCount)
}