알고리즘
백준 2259번 수열 (JAVA)
박카스마시며코딩
2021. 12. 11. 22:52
https://www.acmicpc.net/problem/2559
2559번: 수열
첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기
www.acmicpc.net
해당 문제는 슬라이딩 윈도우를 통해서 해결하였습니다.
저는 해당 문제를 풀면서 2가지를 간과하였습니다.
1. i >= k일때 결과값 초기화
2. 결과값을 0으로 초기화
1번 같은 경우 n == k일 경우 결과값이 안나오게 됩니다. 이래서 i >= k-1일때부터 결과값을 초기화해야합니다.
무작정 계속 초기화하게 되면 k일보다 작은 경우도 들어가기 때문에 안됩니다.
2번 같은경우 현재 문제는 음수도 나올 수 있기 때문에 나올 수 있는 최소값으로 초기화하고 진행해야합니다.
package BOJ;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_2559 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader (System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int k = stoi.apply(st.nextToken());
int[] input = new int[n];
int result = -100 * k;
int sum = 0;
st = new StringTokenizer(br.readLine()," ");
for(int i = 0 ; i < n ; i++){
int num = stoi.apply(st.nextToken());
input[i] = num;
sum += num;
if(i >= k ){
sum -= input[i-k];
}
if(i >= k-1){
result = Math.max(result,sum);
// System.out.println(result);
}
// System.out.println(sum);
}
System.out.println(result);
}
}