✔️ 내 답-> 오답
뭐가 틀렸는지 모르겠다
작은 수로 하면 돌아가는데
숫자가 커지면 오답이 나옴
import java.util.*;
public class Main{
public static int solution(int n, int k, int[] arr){
int max = Integer.MIN_VALUE;
for(int i=0; i<=n-k;i+=k-1) {
int sum=0;
for(int j=i;j<=i+k-1;j++) {
sum+=arr[j];
}
if(max<sum) max=sum;
}
return max;
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb. nextInt();
int[] arr = new int[n];
for(int i=0; i<n;i++) {
arr[i]=kb.nextInt();
}
System.out.print(solution(n,k,arr));
}
}
n일이 있을 때 연속된 k일의 최대 매출을 구하는 문제인데
2중 for문이 아니라 sliding window라는 방법을 사용해야 한다.
이는 맨처음 앞의 k개의 값을 더한 다음에 이 값에서 처음 값을 빼고 다음 값을 더하는 방법으로 크기가 정해진 박스가 넘어지듯이 구하는 방법이다.
✔️ 강의 보고 다시 풀음
import java.util.*;
public class Main{
public static int solution(int n, int k, int[] arr){
int sum =0 ;
int max=Integer.MIN_VALUE;
for(int i=0;i<k;i++) {
sum+=arr[i];
}
max=sum;
for(int i=k;i<n;i++) {
sum+=arr[i]-arr[i-k];
if(max<sum) max=sum;
}
return max;
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb. nextInt();
int[] arr = new int[n];
for(int i=0; i<n;i++) {
arr[i]=kb.nextInt();
}
System.out.print(solution(n,k,arr));
}
}