์ค๋์ ๋ฌธ์
- ๋ฐฑ์ค ์์ด
- https://www.acmicpc.net/problem/2559
์ค๋์ ํ์ต ํค์๋
- N ์ ํฌ๊ธฐ์ ์๊ฐ ๋ณต์ก๋
- ํฌ ํฌ์ธํฐ
์ ๊ทผ ๋ฐฉ๋ฒ
N ์ ํฌ๊ธฐ์ ์๊ฐ ๋ณต์ก๋
- ์ ๋ ฅ์ด 2 <= N <= 100,000 ์ด๊ณ 1 <= K <= N ์ด๋ค.
- ๋จ์ํ๊ฒ 2์ฐจ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฐฐ์ด์์ ์ฐ์์ ์ธ ํฉ์ ๊ตฌํ๊ฒ ๋๋ฉด
- ์ต๋ ์๊ฐ ๋ณต์ก๋๋ N * N = 00,000,000,000 ์ด ๋ ์ ๋ ์๋ค.
ํฌ ํฌ์ธํฐ
- ๋ฒ์๋ฅผ ์ง์ ํด์ ์ ์ฒด ํฉ์ ๊ตฌํด์ผ ํ๋๋ฐ, 2์ฐจ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ณ์ฐํ๊ธฐ์๋ ์๊ฐ ๋ณต์ก๋๊ฐ ํฌ๊ธฐ์ ๋ค๋ฅธ ๋ฐฉ์์ ์ฐพ์์ผ ํ๋ค.
- ์์, ๋ ์ง์ ์ ๊ณ์ฐํด๋๊ณ , ์์๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ๊ณ์ฐํ๋ฉด ์๊ฐ ๋ณต์ก๋๊ฐ ์ค์ด๋ค ์ ์๋ค.
๋ฌธ์ ํ์ด
// ๋งค์ผ 9์ ํ๊ต์์ ์ธก์ ํ ์จ๋
// 3 -2 -4 -9 0 3 7 13 8 -3
// ์ฐ์์ ์ธ ๋ฉฐ์น ๋์์ ์จ๋์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฐ์?
// 5์ผ ๊ฐ์ ์จ๋์ ํฉ = [-12, -12, -3, 14, 31, 28]
// ๊ฐ์ฅ ํฐ ์จ๋์ ํฉ = 31
// N : ์จ๋๋ฅผ ์ธก์ ํ ์ ์ฒด ๋ ์ง์ ์, 2 <= N <= 100,000 (์ต๋ ๋ฐ๋ณต์? N * N = 100,000,000,000)
// K : ํฉ์ ๊ตฌํ๊ธฐ ์ํ ์ฐ์์ ์ธ ๋ ์ง์ ์, 1 <= K <= N
func findMaxTempSum(_ n: Int, _ k: Int, _ tempArray: [Int]) -> Int {
var start = 0
var end = k
var sum = tempArray[start..<end].reduce(0, +)
var maxSum = sum
for _ in 1..<n {
guard end < n else {
break
}
start += 1
end += 1
sum = sum - tempArray[start - 1] + tempArray[end - 1]
maxSum = max(maxSum, sum)
}
return maxSum
}
func readInput() -> (Int, Int, [Int])? {
guard let input = readLine() else {
return nil
}
let splitedInput = input.split(separator: " ")
guard let n = Int(splitedInput[0]), let k = Int(splitedInput[1]) else {
return nil
}
let inputArray = readLine()?.split(separator: " ").compactMap { Int($0) } ?? []
return (n, k, inputArray)
}
if let (n, k, tempArray) = readInput() {
let result = findMaxTempSum(n, k, tempArray)
print(result)
}
- ์ด๊ธฐ ์ฝ๋์์๋ guard ๊ตฌ๋ฌธ ์ด์ ์ start, end ์ธ๋ฑ์ค๋ฅผ +1 ํด์คฌ์ด์ ๋ง์ง๋ง ๊ฐ ๊ณ ๋ ค๊ฐ ์ด๋ ค์ ๋ค.
- ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋์ฒ๋ผ ํ์๋, 7์ด ๋์์ผํ๋๋ฐ 5๊ฐ ๋์์๋ค.
4 2
1 2 3 4
- ์์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํตํด ๋ง์ง๋ง ์ธ๋ฑ์ค๊ฐ ์๋ชป ๊ณ์ฐ๋๊ฒ์ ์๊ฒ ๋์๋ค.
์ค๋์ ํ๊ณ
- ์ ๋ ฅ์ ํฌ๊ธฐ์ ๊ตฌํ ๋ฐฉ์์ ๋ฐ๋ผ ์๊ฐ ๋ณต์ก๋๋ฅผ ์๊ฐํด๋ณด์.
- ์์ธ ์ผ์ด์ค๋ฅผ ๊ณ ๋ คํด๋ณด์.