01-08 08:57
Recent Posts
Recent Comments
관리 메뉴

miinsun

[BAEKJOON] λ°±μ€€ λˆ„μ  ν•© 2559 :: μˆ˜μ—΄ λ³Έλ¬Έ

Algorithm/Baekjoon

[BAEKJOON] λ°±μ€€ λˆ„μ  ν•© 2559 :: μˆ˜μ—΄

miinsun 2022. 4. 22. 19:05

πŸ’¬  문제 μ„€λͺ…

맀일 μ•„μΉ¨ 9μ‹œμ— ν•™κ΅μ—μ„œ μΈ‘μ •ν•œ μ˜¨λ„κ°€ μ–΄λ–€ μ •μˆ˜μ˜ μˆ˜μ—΄λ‘œ μ£Όμ–΄μ‘Œμ„ λ•Œ,
연속적인 λ©°μΉ  λ™μ•ˆμ˜ μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값을 μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

예λ₯Ό λ“€μ–΄, μ•„λž˜μ™€ 같이 10일 κ°„μ˜ μ˜¨λ„κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 
3 -2 -4 -9 0 3 7 13 8 -3
λͺ¨λ“  연속적인 μ΄ν‹€κ°„μ˜ μ˜¨λ„μ˜ 합은 μ•„λž˜μ™€ κ°™λ‹€.

μ΄λ•Œ, μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값은 21이닀. 
또 λ‹€λ₯Έ 예둜 μœ„μ™€ 같은 μ˜¨λ„κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λͺ¨λ“  연속적인 5일 κ°„μ˜ μ˜¨λ„μ˜ 합은 μ•„λž˜μ™€ κ°™μœΌλ©°, 
μ΄λ•Œ, μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값은 31이닀.
맀일 μΈ‘μ •ν•œ μ˜¨λ„κ°€ μ •μˆ˜μ˜ μˆ˜μ—΄λ‘œ μ£Όμ–΄μ‘Œμ„ λ•Œ, 연속적인 λ©°μΉ  λ™μ•ˆμ˜ μ˜¨λ„μ˜ 합이 κ°€μž₯ 큰 값을 κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. 

 

πŸ”¨  μž…μΆœλ ₯ 예

μž…λ ₯ 

  • 첫째 μ€„μ—λŠ” 두 개의 μ •μˆ˜ Nκ³Ό Kκ°€ ν•œ 개의 곡백을 사이에 두고 μˆœμ„œλŒ€λ‘œ 주어진닀.
  • 첫 번째 μ •μˆ˜ N은 μ˜¨λ„λ₯Ό μΈ‘μ •ν•œ 전체 λ‚ μ§œμ˜ μˆ˜μ΄λ‹€.
  • N은 2 이상 100,000 μ΄ν•˜μ΄λ‹€.
  • 두 번째 μ •μˆ˜ KλŠ” 합을 κ΅¬ν•˜κΈ° μœ„ν•œ 연속적인 λ‚ μ§œμ˜ μˆ˜μ΄λ‹€.
  • KλŠ” 1κ³Ό N μ‚¬μ΄μ˜ μ •μˆ˜μ΄λ‹€.
  • λ‘˜μ§Έ μ€„μ—λŠ” 맀일 μΈ‘μ •ν•œ μ˜¨λ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” N개의 μ •μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀.
  • 이 μˆ˜λ“€μ€ λͺ¨λ‘ -100 이상 100 μ΄ν•˜μ΄λ‹€. 

 

좜λ ₯

  • 첫째 μ€„μ—λŠ” μž…λ ₯λ˜λŠ” μ˜¨λ„μ˜ μˆ˜μ—΄μ—μ„œ 연속적인 K일의 μ˜¨λ„μ˜ 합이 μ΅œλŒ€κ°€ λ˜λŠ” 값을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1)

10 2
3 -2 -4 -9 0 3 7 13 8 -3

 

예제 좜λ ₯ 1)

21

 

예제 μž…λ ₯ 2)

10 5
3 -2 -4 -9 0 3 7 13 8 -3

 

예제 좜λ ₯ 2)

31

​

​

πŸ’»  Main.java

  • λˆ„μ ν•©μ„ λ°°μ—΄ sum에 μ €μž₯ν•΄μ€€λ‹€
  • Kλ₯Ό κΈ°μ€€μœΌλ‘œ ν•„μš”ν•œ λˆ„μ ν•© μ˜μ—­μ„ 지정해쀀닀
    • KμΌμ—μ„œ K-1일 μ „μ˜ λˆ„μ ν•©μ„ λΉΌμ£Όλ©΄ λœλ‹€.
    • 1일뢀터 KμΌκΉŒμ§€ λˆ„μ ν•©μ€ sum[K] - sum[K-1];
    • 2일뢀터 K+1μΌκΉŒμ§€ λˆ„μ ν•©μ€ sum[K+1] - sum[K];
/* λ°±μ€€ λˆ„μ  ν•© - 2559 :: μˆ˜μ—΄ */
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        
        int[] arr = new int[N + 1];
        int[] sum = new int[N + 1];
    	st = new StringTokenizer(br.readLine());
    	
    	// 1λΆ€ν„° nκΉŒμ§€ λˆ„μ ν•© κ΅¬ν•˜κΈ°
        for(int i = 1; i <= N; i++) {
        	arr[i] = Integer.parseInt(st.nextToken());
        	if(i == 1)
        		sum[i] = arr[i];
        	else
        		sum[i] = sum[i - 1] + arr[i];
        }
        
        int max = Integer.MIN_VALUE;
        // 1~K κΉŒμ§€μ˜ 합은 sum[K] - sum[0];
        // 2~K+1 κΉŒμ§€μ˜ 합은 sum[K + 1] - sum[1];
        for(int i = K; i <= N; i++) {
        	max = Math.max(max, sum[i] - sum[i - K]);
        }        
        
        System.out.println(max);
    }
}
Comments