티스토리 뷰

#include <stdio.h>

int main(void)
{
	int n, k;
	scanf("%d %d",&n, &k);
	int w[n];
	for(int i=0; i<n; i++) scanf("%d", &w[i]);
	
	int max = 0, tmp = 0, l=0, r=k;
	for(int i=0; i<k; i++) max += w[i]; //k크기의 초기값을 구한 다음
	tmp = max;
    
    if(r==n) { //만약 n==k 라면 초기값이 답입니다.
        printf("%d", max);
        return 0;
    }
    
	while(l<n) { //슬라이딩 윈도우
		tmp = tmp-w[l++]+w[r++];
		if(tmp > max) max = tmp;
		if(r==n) r=0;
	} printf("%d", max);
}

 

풀이 : 슬라이딩 윈도우

 

1. n, k을 입력받습니다.

2. n개의 요소들을 입력받습니다.

3. 초기값으로 0부터 k-1번째의 요소들을 더합니다.

4. 슬라이딩 윈도우 알고리즘을 통해서(이전의 값에 앞을 빼고, 뒤를 더함) 나머지 경우들의 합들을 구하고 그 중 최댓값을 찾습니다 (만약 n == k 라면 초기값이 정답입니다)

5. 최댓값을 출력합니다.

 

 

 

https://www.acmicpc.net/problem/24499

 

24499번: blobyum

4번 애플파이와 1번 애플파이를 먹으면 총 맛의 합이 9이고, 이가 최댓값이다.

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함