문제
https://www.acmicpc.net/problem/24499
오늘도 블롭은 배고프다. 그래서 블롭은 요리사 연우를 찾아가 맛있는 것을 달라고 부탁했다.
연우는 귀여운 블롭에게 이왕이면 맛있는 음식을 해 주고 싶었기에, 자신이 만드는 데에 가장 뛰어난 애플파이를 만들기로 하였다. 연우는 N개의 애플파이를 만들었으며, 이를 원 모양으로 책상에 배치해 놓았다.
각 애플파이는 하나의 양의 정수로 표현되며, 이는 맛있는 정도를 의미한다. (수가 클수록 더 맛있는 애플파이이다.)

블롭은 N개의 애플파이 중 K개를 먹으려고 한다. 물론 블롭은 힘을 들이지 않고 먹고 싶기 때문에, 연속으로 배치되어 있는 K개의 애플파이를 먹으려 한다.
블롭을 도와서 블롭이 먹을 애플파이의 맛의 합의 최댓값을 구해 주자!
입력
첫째 줄에 애플파이의 개수와 먹으려는 애플파이의 개수 N과 K가 공백으로 구분되어 주어진다.
둘째 줄에 애플파이의 맛있는 정도를 나타내는 값인 A1,A2,⋯,AN이 공백으로 구분되어 주어진다.
출력
블롭이 먹을 애플파이의 맛의 합의 최댓값을 출력한다.
제한
- 1≤K≤N≤105
- 1≤Ai≤100 (1≤i≤N)
풀이
- 슬라이딩 윈도우의 기본 문제이다.
- 원형 순회를 구현하기 위해, tasteScores 배열의 앞쪽 k개 요소를 잘라 extendedTastes 배열을 만들고, 이를 기존 tasteScores 뒤에 덧붙여 하나의 배열로 만든다.
- 초기 윈도우를 설정한 뒤, 윈도우를 이동시키며 최댓값을 갱신한 후 답을 출력한다.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [n, k] = input[0].split(" ").map(Number);
const tasteScores = input[1].split(" ").map(Number);
const extendedTastes = tasteScores.slice(0, k);
const applepies = [...tasteScores, ...extendedTastes];
let windowSum = 0;
let maxTaste = 0;
for (let i = 0; i < k; i++) {
windowSum += applepies[i];
}
maxTaste = windowSum;
for (let i = k; i < applepies.length; i++) {
windowSum = windowSum - applepies[i - k] + applepies[i];
maxTaste = Math.max(windowSum, maxTaste);
}
console.log(maxTaste);
'코딩테스트' 카테고리의 다른 글
[백준] 귀여운 라이언 (JS) (0) | 2025.05.01 |
---|---|
[백준] 소가 길을 건너간 이유 5 (JS) (0) | 2025.04.29 |
[백준] 발머의 피크 이론 (JS) (0) | 2025.04.27 |
[백준] 블로그 (JS) (0) | 2025.04.23 |
[백준] 꿀 아르바이트 (JS) (0) | 2025.04.22 |