슬라이딩 윈도우 기법을 이용하면 간단하게 풀리는 문제.
먼저 1일차부터 X일동안 방문자 수를 체크하고, 그 후에 오른쪽으로 창문을 밀듯이 밀면서 양끝 값을 더해주고 빼면서 확인하면된다. 최대값이 같으면 횟수 또한 세어주면 된다.
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static class Room
{
List<User> users = new ArrayList<>();
}
static public class User implements Comparable<User>
{
int level;
String nickName;
public User(int level, String nickName) {
this.level = level;
this.nickName = nickName;
}
@Override
public int compareTo(User o) {
return nickName.compareTo(o.nickName);
}
}
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int []arr = new int [n];
for(int i=0;i<n;i++)
{
arr[i] = Integer.parseInt(st.nextToken());
}
int sum =0;
for(int i=0;i<x;i++)
{
sum+= arr[i];
}
int ans = sum;
int ans_cnt =1;
for(int i= x;i<n;i++)
{
sum += arr[i];
sum -= arr[i-x];
if(ans < sum) {
ans = sum;
ans_cnt = 1;
}
else if(ans == sum) {
ans_cnt++;
}
}
if(ans ==0)
{
bw.write("SAD");
}
else {
bw.write(Integer.toString(ans) + "\n" + Integer.toString(ans_cnt));
}
bw.flush();
}
}