[BOJ 2559] 수열 JAVA

쭈·2022년 7월 20일
0

BOJ

목록 보기
1/2

문제

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));

    }
}


profile
🌱

0개의 댓글