https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
풀기 전:
쉬워 보이는데?
K가 4라면 0123 1234 배열 하나 새로 만들고
앞 빼주고 뒤 빼주는 투 포인터 쓰면 되겠네
N은 2 이상 100,000 이하이다.
제한 시간 1초니까
N^2는 100억
N^2로 풀면 안 된다
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N, K;
int[] array;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
array = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++)
array[i] = Integer.parseInt(st.nextToken());
무난하게 입력 받고
int sum = 0;
for (int i = 0; i <= K - 1; i++)
sum += array[i];
int max = sum;
int point1 = 0;
int point2 = K;
for (; point2 < N; point2++) {
sum -= array[point1];
sum += array[point2];
if (max < sum)
max= sum;
point1++;
}
sb.append(max);
System.out.println(sb);
}
}
첫 부분 합 구해주고 그걸 max로 설정
포인터 이동시키면서 비교 후 max 출력
O(N)