[Java] 연속된 부분 수열의 합 - Lv2 프로그래머스코딩테스트/프로그래머스2023. 4. 11. 06:59
Table of Contents
728x90
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/178870
풀이
투포인터 알고리즘을 이용해 풀었으며, 딱히 막힘이 없었던 문제로
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 :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!