https://www.acmicpc.net/problem/2559
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int solution(int n, int k, int[] nums){
int sum = 0;
int answer = 0;
for(int i=0; i<k; i++){
sum += nums[i];
}
answer = sum;
for (int i=k; i<n; i++){
sum += nums[i] - nums[i-k];
answer = Math.max(answer, sum);
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st2 = new StringTokenizer(br2.readLine());
int arr[] = new int[N];
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st2.nextToken());
}
System.out.println(solution(N, K, arr));
}
}
슬라이딩윈도우 개념만 알고있으면 바로 풀 수 있는 문제라고 생각했는데, 예상과 다르게 런타임에러🥲
런타임에러가 왜 발생했을까?
NoSuchElemenException:
Thrown by various accessor methods to indicate that the element being requested does not exist.
solution 메소드 코드자체의 문제보다는 main에서 입력값을 받다가 예외가 터진 것 같다.
그치만 for문 조건식에 내가 임의의 숫자를 넣어준 것도 아니고 N 사이즈만큼의 배열을 생성해서 입력값을 넣어주는데 왜 이러한 에러가 뜰까..?
부끄럽지만 에러의 원인은 내가 BufferedReader, StringTokenizer를 잘못사용하고있었다.
사실 난 Scanner만 줄곧 사용해왔는데 제대로 된 개념없이 이번에 처음 써봤더니 ..
쓰면서도 영 찜찜하기도 했고 문제 풀이와 관련된 코드 자체에는 문제가 없을 것 같아서 바로 확인해보니 역시나 ㅎㅅㅎ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int solution(int n, int k, int[]nums){
int sum = 0;
int answer;
for(int i=0; i<k; i++){
sum += nums[i];
}
answer = sum;
for (int i=k; i<n; i++){
sum += nums[i] - nums[i-k];
answer = Math.max(answer, sum);
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = 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());
}
System.out.println(solution(N, K, arr));
}
}