codefores 1117A
2019-02-21
1117A Best Subsegment. 며칠전에 있었던 Educational Codeforces Round 60 (Rated for Div.2)의 문제다. 이 문제를 대회 당시에 봤을 때는 어떻게 평균을 빨리 구하지? 부분합써도 그게 그건데..하며 시간초과만 내고 못풀었다. 며칠지나서 지금 다시 푸니까 너무 쉬운 문제라서 당황했다… 다시는 멍청한 실수 안해야지. 이 날 레이팅이 크게 떨어져서 상심을 했지만 계속 풀다보면 이런 실수도 줄어지겠지ㅠㅠ
이 문제는 산술평균이 최대가 되는 구간의 길이를 구하는 것이다. 산술평균이 최대인 경우는 input의 배열 내에서 max값 이다. 그러므로 최소 길이는 1이고, 그 이상의 길이가 될 때는 max값이 연속으로 여러개 있는 경우이다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] a = new int[n + 1];
int max = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 1; i <= n; i++) {
a[i] = Integer.parseInt(st.nextToken());
max = Math.max(max, a[i]);
}
int ans = 0;
int c = 0;
for(int i = 1; i <= n; i++) {
if(a[i] == max) c++;
else c = 0;
ans = Math.max(ans, c);
}
System.out.println(ans);
}
}