
-Code
class Solution {
public int[] solution(int[] sequence, int k) {
// 투포인터 셋팅
int left = 0, right = 0;
// 현재 시작 셋팅 및 정답 배열의 길이 판별을 위한 변수 셋팅
int sum = sequence[0], minGap = Integer.MAX_VALUE;
int[] answer = new int[2];
while (true) {
if (sum < k) {
// 비내림차순이므로 현재 합보다 작으면 오른쪽 이동
right++;
// 오른쪽 포인터가 범위 넘어감 체크
// 없으면 Index 에러 발생
if (right == sequence.length) break;
sum += sequence[right];
} else {
// 합이 k이상인 경우
// k와 같고 범위가 더 작으면 저장
if (sum == k && minGap > right - left) {
minGap = right - left;
answer[0] = left;
answer[1] = right;
}
// 왼쪽 포인터 이동
sum -= sequence[left];
left++;
}
}
return answer;
}
}
처음에 투포인터 설정은 맞았으나 sum이 k와 같으면 바로 반환하게 하여 틀렸었습니다.
찾아보니 제가 빼먹고 설계한 부분이 길이가 가장 짧은 배열의 2 포인터를 구하는 것이었습니다. 그래서 탈출을 포인터가 넘어가면 되도록 하고 sum이 k인 범위가 작은 경우만 갱신하도록 하여 O(n)으로 작동하게 하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 10176번 Opposite Words (0) | 2026.04.09 |
|---|---|
| [프로그래머스/Java] 큰 수 만들기 (0) | 2026.04.09 |
| [백준/Java] 34386번 Tic-Tac-Toe AI (0) | 2026.04.08 |
| [프로그래머스/Java] 서버 증설 횟수 (0) | 2026.04.07 |
| [백준/Java] 33278번 나무와 그림자 easy (0) | 2026.04.07 |