boj 2559

임종혁·2024년 1월 21일

문제를 보니 연속된 수열 k 개를 선택 시 가장 큰 값 을 구하는 문제이다
연속된 수열 k 개 고정된 값
슬라이딩 윈도우 문제인 것이다

문제 해결

  1. 슬라이딩 윈도우 0 부터 k 개의 합을 구한다
  2. 1씩 움직이며 합을 수정한다 sum = sum - arr[i-1] + arr[i+k-1];
  3. 합에서 max 를 구한다

for(int i=0; i<k; i++){
	sum += arr[i]
}

for(int i=1; i<=n-k; i++){
	sum = sum - arr[i-1] + arr[i+k-1];
    
    if(max < sum){
    	max = sum;
    }
}

전체 코드

public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        StringTokenizer st;
        
        st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        
        
        int[] arr = new int[n];
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }
        
        int sum = 0;
        int max = 0;
        for(int i=0; i<k; i++){
            sum += arr[i];
        }
        max = sum;
        
        for(int i=1; i<=n-k; i++){
            sum = sum - arr[i-1] + arr[i+k-1];
            if(max < sum){
                max = sum;
            }
        }
        System.out.println(max);
    }

다시 한번 고정된 값을 구한다 -> 슬라이딩 윈도우
고정 안된 값을 구한다 -> 투포인터

0개의 댓글