https://school.programmers.co.kr/learn/courses/30/lessons/178870
문제 분류 : 코딩테스트 연습 > 연습문제 > 연속된 부분 수열의 합
난이도 : 2
정답 코드
import java.util.*;
class Solution {
static class memo implements Comparable<memo>{
int start; int end; int size;
public memo(int start, int end, int size){
this.start = start; this.end = end; this.size = size;
}
public int compareTo(memo o){
if(this.size > o.size){
return 1;
}
else if(this.size == o.size){
if(this.start > o.start){
return 1;
}
else if(this.start == o.start){
return 0;
}
else{
return -1;
}
}
else{
return -1;
}
}
}
public int[] solution(int[] sequence, long k) {
PriorityQueue<memo> pq = new PriorityQueue<>();
int start = 0;
int end = 0;
long [] prefixSum = new long [sequence.length];
for(int i = 0; i < sequence.length; i++){
if(i == 0){
prefixSum[i] = sequence[i];
continue;
}
prefixSum[i] = prefixSum[i-1] + sequence[i];
}
while(start < sequence.length && end < sequence.length){
long temp = 0;
if(start == 0){
temp = prefixSum[end];
}
else{
temp = prefixSum[end] - prefixSum[start - 1];
}
if(temp == k){
pq.add(new memo(start, end, end - start + 1));
end++;
}
else if(temp > k){
start++;
}
else if(temp < k){
end++;
}
}
int[] answer = new int[2];
answer[0] = pq.peek().start;
answer[1] = pq.peek().end;
return answer;
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
Java 프로그래머스 짝지어 제거하기 (0) | 2024.02.29 |
---|---|
Java 프로그래머스 카카오프렌즈 컬러링북 (0) | 2024.02.28 |
Java 프로그래머스 과제 진행하기 (0) | 2024.02.28 |
Java 프로그래머스 광물 캐기 (0) | 2024.02.28 |
Java 프로그래머스 리코쳇 로봇 (2) | 2024.02.28 |