알고리즘/Java
[프로그래머스] java - 연속 부분 수열 합의 개수
조이은
2023. 5. 6. 14:54
https://school.programmers.co.kr/learn/courses/30/lessons/131701
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Level 2. 연속 부분 수열 합의 개수
접근 방식
Set을 사용한다. sum값을 구할 때에는, j%elements.length 인덱스를 사용한다.
1. 반복문을 돌면서, 각 길이에 맞는 배열의 합을 구한다.
2. 합을 set에 저장하여, 중복되지 않도록 한다.
3. 해당 과정을 elements.length번 반복한다.
코드
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> set = new HashSet<>();
int k = 0;
while(k<=elements.length) {
for(int i=0; i<elements.length; i++) {
int sum = 0;
for(int j=i; j<i+k; j++) {
sum += elements[j%elements.length];
}
set.add(sum);
}
k++;
}
return set.size()-1;
}
}
고찰
사실 이게 왜 되지?.. 의 문제이다. 이런 식이려나.. 하고 했더니........
해당 문제의 포인트는 set을 사용하여 중복을 없애고, 합계를 구할 때의 인덱스는 j%elements.length를 사용하여 배열을 넘어서는 일이 없도록 하고, 다시 처음으로 돌아갈 수 있도록 한다.
제대로 푸는 문제가 딱히 없는 것 같아서 걱정이다.......
반복문을 세번이나 돌아가는 만큼 성능을 고려해보아야 할 것 같다.