[2559번] 수열 ( 슬라이딩 윈도우 )

알쓸코딩·2023년 12월 5일
0

코테 문제들

목록 보기
39/113

업로드중..

업로드중..

슬라이딩 윈도우는 이중 반복문이 필요없다.


👾 주의

아직 배열의 길이, 구간, 범위, start, end 등의 구현이 부족한 것 같다.
디버깅을 하지 않아도 한 번에 맞출 수 있을 때, 그때까지 많이 풀어볼 것.


✅ 코드

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

public class Main {

	static int arr[];
	static int sArr[];

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		arr = new int[n];
		sArr = new int[n - k + 1]; // 합 배열

		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		//계속 start, end를 증가시키는데 end가 배열의 범위를 벗어나기 전까지 실행시켜야 함.
		//안 벗어나면, start부터 end까지의 sum을 구하고 sArr배열에 저장한다.


		int start = 0;
		int end = 0;

		//while안의 동작은 while의 밖의 start에 영향을 주지 않는다.
		while (end < arr.length) {
			int sum = 0;
			end = start + k;
			for (int i = start; i < end; i++) { //처음에 0과 0이 들어오니까 앞에서 증가시켜줘야
				sum += arr[i];
			}
			sArr[start] = sum;
			start++;
		}

		int max = Arrays.stream(sArr).max().getAsInt();
		System.out.println(max);


	}
}

업로드중..

왜 또 이미지 업로드 안됌ㅜ

profile
알면 쓸데있는 코딩 모음!

0개의 댓글