[Java] 연속된 부분 수열의 합 - Lv2 프로그래머스

P.S./프로그래머스 2023. 4. 11. 06:59
728x90
728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/178870

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이


https://mag1c.tistory.com/306

투포인터 알고리즘을 이용해 풀었으며, 딱히 막힘이 없었던 문제로

size는 sum=k일 때의 부분 배열의 길이로

 

1. 기존 size가 더 클 때는 문제 조건에 따라 당연히 left, right를 최신화

2. size가 같을 때는 더 앞의 부분 배열 idx값이 들어가야 한다.

 

class Solution {
    public int[] solution(int[] sequence, int k) {        

    	int left = 0;
    	int right = 0;
    	int sum = 0;
    	int size = sequence.length;
    	int ans1 = 0;
    	int ans2 = 0;
    	
    	for(right=0; right<sequence.length; right++) {    		
    		sum += sequence[right];
    		
    		while(sum > k) {
    			sum -= sequence[left];
    			left++;
    		}
    		
    		if(sum == k) {
    			if(size > right-left) {
    				size = right-left;
    				ans1 = left;
    				ans2 = right;
    			}
    			else if(size == right-left) {
    				ans1 = Math.min(ans1, left);
    				ans2 = Math.min(ans2, right);
    			}
    		}
    		
    	}
    	
    	return new int[] {ans1, ans2};
    }
}

 

 

728x90
300x250
mag1c

mag1c

2년차 주니어 개발자.

방명록