문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/178870

제한 사항

입출력 예

풀이
class Solution {
public int[] solution(int[] sequence, int k) {
int[] answer = {};
int minLength = Integer.MAX_VALUE;
int count = 0;
int first = 0;
long sum = 0;
while(count != sequence.length) {
sum += sequence[count];
if (sum < k) count++;
else if (sum == k) {
if (count - first + 1 < minLength) {
minLength = count - first + 1;
answer = new int[] { first, count };
}
sum -= sequence[first];
first++;
count++;
}
else {
sum -= sequence[count];
sum -= sequence[first];
first++;
}
}
return answer;
}
}
후기
앞 숫자부터 sum에 합계를 더해가면서 k보다 작으면 계속 앞의 숫자를 더해나가고, 같으면 제일 짧은 길이인지 확인하고 정답에 넣는다. k보다 크면 sum에 더해두었던 맨 앞의 인덱스의 값을 제거하면서 k보다 작아질 때까지 반복한다. sequence의 마지막 인덱스 처리를 어떻게 할지가 관건인데 sum에 sequence[count]의 값을 (sum < k) 조건문에 넣어버리면 squence의 마지막 인덱스의 값을 제대로 처리하지 못하고 끝나게 된다. 그렇기 때문에 일단 sequence의 다음 인덱스로 넘어갔으면 제일 먼저 sum에 해당 sequence[count]의 값을 더하고 나중에 필요하면 다시 빼주면 된다.
그리고 문제 풀 때 k의 길이가 100억인줄 알았는데 다시 보니까 10억이었다;; 이것 때문에 long으로 sum을 저장한 것이었는데 int로 고치는 게 낫다. 이래서 문제의 조건을 잘 읽어봐야 한다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] K번째수 (0) | 2023.07.19 |
|---|---|
| [프로그래머스][JAVA][Lv. 1] 기사단원의 무기 (0) | 2023.07.18 |
| [프로그래머스][JAVA][Lv. 1] 모의고사 (0) | 2023.07.17 |
| [프로그래머스][JAVA][Lv. 2] 두 원 사이의 정수 쌍 (0) | 2023.07.17 |
| [프로그래머스][JAVA][Lv. 1] 체육복 (0) | 2023.07.16 |