algorithm/문제 풀이

99클럽 코테 스터디 12일차 TIL - 프로그래머스 연속된 부분 수열의 합

ssoheeh 2024. 4. 12. 21:48

배열 for문으로 돌리니까 시간초과 -> 풀이 보니까 투포인터 알고리즘..

import java.io.*;
import java.util.*;

class Solution {
    
    static int[] answer;
    
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[]{0,sequence.length-1};
        int left = 0;
        int right = 1;
        int sum = sequence[0];
        while(left<right){
            if(sum==k){
                if(right-1-left<answer[1]-answer[0]){
                    answer[0] = left;
                    answer[1] = right-1;
                }
                sum -= sequence[left++];
                //left++;
            }else if(sum>k){
                sum -= sequence[left++];
            }else if(right<sequence.length){
                sum += sequence[right++];
            }else{
                break;
            }
        }
        return answer;
    }
    
}

투포인터 알고리즘을 아직 정리하지 못해서 떠올리지 못했다.

이해는 했으나 다음에 한번 더 정리해볼것.

 

오늘의 회고

  • 알고리즘 문제를 고민하다가 안되면 포기하게 되는데 그래도 끝까지 잘 생각해보자
  • 내일(4/13) 학습 예정 : 스프링 공부한 부분 정리