<섹션3-Two pointers, Sliding window> 3. 최대 매출

조이·2022년 1월 6일
0

자바 알고리즘

목록 보기
27/41
post-thumbnail

3. 최대 매출

<설명>

현수의 아빠는 제과점을 운영합니다. 현수아빠는 현수에게 N일 동안의 매출기록을 주고 연속
된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다.
만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면
12 15 11 20 25 10 20 19 13 15
연속된 3일간의 최대 매출액은 11+20+25=56만원입니다.
여러분이 현수를 도와주세요.

<입력>

첫 줄에 N(5<=N<=100,000)과 K(2<=K<=N)가 주어집니다.
두 번째 줄에 N개의 숫자열이 주어집니다. 각 숫자는 500이하의 음이 아닌 정수입니다.

<출력>

첫 줄에 최대 매출액을 출력합니다.

===================================================

<코드>

먼저 지정된 날짜만큼의 매출을 저장해서 MAX값에 저장한다. 그리고 그 다음날의 매출을 저장하면 가장 오래된 날짜의 매출을 뺀 값과 MAX의 값을 비교하여 더 큰 값을 MAX에 저장하면 최대 매출을 구할 수 있다.

import java.util.*;

class Main {	
	public int solution(int num,int d,int[] array) {
		int answer=0;
		int max=0;
		int p1=0,p2=0;
		while(p1<d) {
			max+=array[p1++];
		}
		answer=Math.max(answer, max);
		while(d<array.length) {
			max=max+array[d++]-array[p2++];
			answer=Math.max(answer, max);
		}
		return answer;
		
	}
		
		
	public static void main(String[] args) {
		Main main = new Main();
		Scanner scan = new Scanner(System.in);
	   
		int num=scan.nextInt();
		
		int d=scan.nextInt();
		
	    int[] array=new int[num];
		for(int i=0;i<num;i++) {
			array[i]=scan.nextInt();
			}
	 
		System.out.print(main.solution(num,d,array));
		}
}

<중요>

1) 날짜만큼의 틀을 정해서 그 틀이 움직인다고 생각하면 더 효율적이다.

profile
joy_study

0개의 댓글