Sliding Window_k개 숫자 최대값 구하기
✅ n개 숫자의 배열이 주어졌을 때, 연속된 k개의 숫자를 더했을 때 최댓값을 구하세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Main {
public int solution(int n, int k, int[] intArr){
int answer= 0;
//배열의 첫 k개 합 구하기
for(int i=0; i<k; i++){
answer += intArr[i];
}
//window 합을 가지고 구할거임
int window= answer;
//window에 전꺼 빼고, 그 다음꺼 더하기
for(int i=k; i<n; i++){
window += intArr[i] - intArr[i-k];
answer= Math.max(window, answer);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] intArr = new int[n];
for(int i=0; i<n; i++){
intArr[i] = sc.nextInt();
}
System.out.print(T.solution(n, k, intArr));
}
}
//⭐️input:
// 10 3
// 12 15 11 20 25 10 20 19 13 15
//⭐️output:
//56
🔵 ThingsILearned
✔️ Sliding window
- 먼저 기준이 되는 숫자들의 합을 구한다. (이 경우 시작되는 숫자 3개)
- 다음 바뀔 변수를 하나 정하고(이 경우 window)
- window에 전 값을 빼고, 그 다음 올 값을 더한다.
- 더 큰 값을 구해 최댓값을 출력
🔴🟢 Time limit exceed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Main {
public int solution(int n, int k, int[] intArr){
int answer= 0;
int max=0;
for(int i=0; i<n-k+1; i++){
for(int j=i; j<k+i; j++){
max += intArr[j];
if(max > answer) answer=max;
}
max=0;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] intArr = new int[n];
for(int i=0; i<n; i++){
intArr[i] = sc.nextInt();
}
System.out.print(T.solution(n, k, intArr));
}
}
- 시작부터 k개의 합을 구할거다
- 2중 for문으로, 겉에 있는 for문은 어디서부터 시작할지를 정의한다.
- 안에 있는 for문은 k개의 합을 구한다.
- 더 큰 합을 구하여 최댓값으로 출력한다.
This post is licensed under CC BY 4.0 by the author.