- 문제설명
준하는 블로그를 운영하고 있습니다. 용돈을 벌고 싶었던 준하는 블로그에 광고를 달려고 합니다.
광고를 달기 위해서는 블로그의 방문자 수가 많을 수록 유리합니다. 블로그의 관리자 메뉴에는 N일간의 방문자의 수가 기록되어 있는데, 준하는 이 기록중 연속된 K일만 빼고 모두 삭제해서 평균 방문자가 더 많은 것처럼 만드려고 합니다. 가장 많은 평균 방문자가 표시되도록 하기 위해서는 몇 번째 날 부터 K일만 남겨야 하는지 계산하는 프로그램을 작성해 주세요.
- 입출력 예
입력 #1
5 2
7 4 2 1 8
입력 #2
6 3
1 2 3 4 5 6
- 입력값 설명
첫째 줄에 N과 K가 공백으로 구분되어 주어집니다. (1 ≤ N ≤ 5,000, 1 ≤ K ≤ N)
둘째 줄에 i일째의 방문자 수를 나타내는 A_i가 공백으로 구분되어 주어집니다. (1 ≤ A_i ≤ 1,000)
출력 #1
1
출력 #2
4
- 출력값 설명
가장 많은 평균 방문자가 표시되도록 하기 위해서는 몇 번째 날 부터 K일만 남겨야 하는지 출력합니다. 그런 날이 여러 개라면, 가장 빠른 날을 출력합니다.
- 풀이과정
이번 문제는 연속적인 날을 찾는 문제로써 가장 많은 평균 방문자를 찾기위해 슬라이딩 윈도우를 사용합니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] num = new int[n];
for (int i = 0; i < n; i++) {
num[i] = scanner.nextInt();
}
long sum = 0;
for (int i = 0; i < k; i++) {
sum += num[i];
}
long maxSum = sum;
int day = 0;
for (int i = k; i < n; i++) {
sum += num[i] - num[i - k];
if (sum > maxSum) {
maxSum = sum;
day = i - k + 1;
}
}
System.out.println(day + 1);
}
}
'코딩 알고리즘 스터디' 카테고리의 다른 글
프로그래머스 Lv.2 메뉴 리뉴얼 (Java) (0) | 2024.12.16 |
---|---|
코딩마스터스 (중급) 메타버스 토끼 (2) | 2024.12.10 |
코딩마스터스 (고급) 작곡 프로그램 (1) | 2024.12.03 |
코딩마스터스 (중급) 곰팡이 (0) | 2024.11.19 |
프로그래머스 Lv.3 정수삼각형 (0) | 2024.11.11 |