/ BOJ

BOJ_2559_수열_JAVA

문제 : 수열

링크 : BOJ_2559_수열

접근 방식

연속된 날짜의 온도의 합을 구해야한다.

1부타 N-K+1만큼 반복하면 배열의 값을 벗어나지 않으면서 모든 연속된 온도의 경우의 수를 구할 수 있다.

나는 i+K가 N의 값보다 커질 경우 반복문을 나가도록 했다.

연속된 온도의 합을 구해서 최댓값과 비교하여 최종적으로 연속된 온도의 합의 최댓값을 구한다.

풀이 방법

  1. 온도 정보를 읽어올 배열을 하나 생성한다.

  2. 온도의 정보를 입력받아 배열에 할당한다.

  3. 최댓값을 담을 변수를 생성해 초기화시켜주고, 배열의 길이만큼 반복한다.

  4. i+K의 값이 N을 벗어나면 반복문을 나간다.

  5. 내부반복문으로, i부터 i+K까지 반복하며 해당 배열의 값을 모두 더한다.(연속된 날짜의 온도의 합)

  6. 배열의 연속된 값을 모두 더한 값과 현재 저장되어있는 최댓값을 비교하여 더 큰 수를 최댓값에 담는다.

  7. 모든 반복이 종료된 후 최댓값을 출력한다.

소스 코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_2559_수열 {

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(in.readLine()," ");

		int N = Integer.parseInt(st.nextToken());

		int K = Integer.parseInt(st.nextToken());


		int arr[] = new int[N];
		st = new StringTokenizer(in.readLine()," ");
		for(int i=0;i<N;i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		int max = Integer.MIN_VALUE;
		for(int i=0;i<N;i++) {
			if(i+K > N) {
				break;
			}
			int sum = 0;
			for(int j=i;j<i+K;j++) {
				sum += arr[j];
			}
			max = Math.max(max, sum);
		}

		System.out.println(max);
	}

}