[코테3_3] 최대 매출

byeol·2022년 12월 1일
0

코딩테스트

목록 보기
21/42

✔️ 내 답-> 오답
뭐가 틀렸는지 모르겠다
작은 수로 하면 돌아가는데
숫자가 커지면 오답이 나옴

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));
		
	}
	
	
	
}
profile
꾸준하게 Ready, Set, Go!

0개의 댓글