프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이해하기
길이를 1부터 elements의 길이까지 늘려가며 연속 부분 수열을 만들고, 각각의 합을 저장하는 문제이다.
단, 중복이 없어야 한다고 했으니 Set을 활용하면 될 것 같은데... 연속 부분 수열 부분에서 막혔다.
참고한 블로그⬇️
[Java/자바] 프로그래머스 Lv2 - 연속 부분 수열 합의 개수 (Set)
문제 설명 철호는 수열을 가지고 놀기 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어졌습니
hstory0208.tistory.com
문제풀이
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 > 프로그래머스' 카테고리의 다른 글
[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 |