728x90
이해하기
길이를 1부터 elements의 길이까지 늘려가며 연속 부분 수열을 만들고, 각각의 합을 저장하는 문제이다.
단, 중복이 없어야 한다고 했으니 Set을 활용하면 될 것 같은데... 연속 부분 수열 부분에서 막혔다.
참고한 블로그⬇️
문제풀이
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> set = new HashSet<>();
int start = 1;
while (start <= elements.length) {
for (int i = 0; i < elements.length; i++) {
int value = 0;
for (int j = i; j < i + start; j++) {
value += elements[j % elements.length];
}
set.add(value);
}
start++;
}
return set.size();
}
}
int start = 1;
길이가 1부터 시작이기에 start = 1
while (start <= elements.length) {
for (int i = 0; i < elements.length; i++) {
int value = 0;
for (int j = i; j < i + start; j++) {
value += elements[j % elements.length];
}
set.add(value);
}
start++;
}
길이가 1부터 elements.length일 때까지 while문을 순회한다.
내부 for문에서 elements를 순회하며 value를 구하는데, 이 때 j = i 부터 j < i + start까지의 값을 구하여 set에 저장한다.
그렇게 구한 j 값이 elements.length를 넘을 수도 있으니 모듈러 연산을 해준다.
이 부분의 구현이 어렵게 느껴졌다ㅠ
set.add(value) 해주면 중복은 당연히 처리되고, 이중for문을 다 돌고 나면 start값이 ++된다.
return set.size();
마지막에 set.size()를 반환하면 끝
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.2] 프로그래머스 - 삼각 달팽이 : Java (0) | 2024.06.10 |
---|---|
[Lv.2] 프로그래머스 - 택배상자 : Java (0) | 2024.06.07 |
[Lv.2] 프로그래머스 - 프로세스 : Java (0) | 2024.05.30 |
[Lv.2] 프로그래머스 - 귤 고르기 : Java (1) | 2024.05.30 |
[Lv.2] 프로그래머스 - 주차 요금 계산 : Java (0) | 2024.05.30 |