프로그래머스 | 연속된 부분 수열의 합 (Java)

mul·2023년 7월 6일
0

알고리즘

목록 보기
45/65
post-custom-banner

🔒 문제

프로그래머스 Lv.2 연습문제 연속된 부분 수열의 합

🔑 해결

수열을 나타내는 정수 배열 sequence와 부분 수열의 합을 나타내는 정수 k가 매개변수로 주어질 때, 조건을 만족하는 부분 수열의 시작 인덱스와 마지막 인덱스를 배열로 return하는 solution 함수를 작성하는 문제이다.

  1. sum이 k보다 작은 동안 end값를 증가시키면서 더하기
  2. sum이 k값과 같고, len(길이)가 이전에 저장한 길이보다 짧다면 answer배열에 start와 end-1값을 저장하고, 새로운 길이(end-start)값을 len에 저장
  3. sum이 k이상이므로, sum에서 sequence[start]값을 빼준다.
  4. 반복문을 다 돈 후 배열 answer을 return

투포인터를 사용하는 것은 쉽게 알아차렸지만, 반복문과 조건문을 설정하는 부분에서 헤매었다. 연습이 더 필요할 것 같다.

🔓 코드

class Solution {
    public int[] solution(int[] sequence, int k) {
        int[] answer = new int[2];
        int sum = 0;
        int start = 0, end = 0;
        int len = -1;
        for (;  start < sequence.length; start++) {
			while(end < sequence.length && sum < k) {
				sum += sequence[end++];
			}
			
			if (sum == k) {
				if (len == -1 || len > end - start) {
					answer[0] = start;
					answer[1] = end-1;
					len = end - start;
				}
			}
			
			sum -= sequence[start];
		}
        
        return answer;
    }
}
post-custom-banner

0개의 댓글