BOJ_2559_수열_JAVA
문제 : 수열
링크 : BOJ_2559_수열
접근 방식
연속된 날짜의 온도의 합을 구해야한다.
1부타 N-K+1만큼 반복하면 배열의 값을 벗어나지 않으면서 모든 연속된 온도의 경우의 수를 구할 수 있다.
나는 i+K가 N의 값보다 커질 경우 반복문을 나가도록 했다.
연속된 온도의 합을 구해서 최댓값과 비교하여 최종적으로 연속된 온도의 합의 최댓값을 구한다.
풀이 방법
-
온도 정보를 읽어올 배열을 하나 생성한다.
-
온도의 정보를 입력받아 배열에 할당한다.
-
최댓값을 담을 변수를 생성해 초기화시켜주고, 배열의 길이만큼 반복한다.
-
i+K의 값이 N을 벗어나면 반복문을 나간다.
-
내부반복문으로, i부터 i+K까지 반복하며 해당 배열의 값을 모두 더한다.(연속된 날짜의 온도의 합)
-
배열의 연속된 값을 모두 더한 값과 현재 저장되어있는 최댓값을 비교하여 더 큰 수를 최댓값에 담는다.
-
모든 반복이 종료된 후 최댓값을 출력한다.
소스 코드
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);
}
}