https://school.programmers.co.kr/learn/courses/30/lessons/131701
Lv2. 중에서도 쉬운 문제
내 풀이
1. 원래 배열 길이의 두 배의 길이 배열에 원소들 한 번 더 저장
2. 자료구조 HashSet을 사용해 중복저장을 피함
3. size 별로 차례대로 합을 구한 뒤 set에 저장
4. set의 size 리턴
import java.util.*;
class Solution {
public int solution(int[] elements) {
int answer = 0;
int length = elements.length;
int[] twice_elements = new int[length*2];
for(int i=0; i<length; i++){
twice_elements[i] = twice_elements[i+length] = elements[i];
}
HashSet<Integer> set = new HashSet<>();
for(int s=1; s<=length; s++){ // 부분수열의 길이
for(int i=0; i<length; i++){ // 덧셈 시작 인덱스
int sum = 0;
for(int j=i; j<i+s; j++){ // 덧셈 로직
sum+=twice_elements[j];
}
set.add(sum);
}
}
answer = set.size();
return answer;
}
}
다른 사람 풀이
모드 연산을 사용하면 불필요한 메모리 사용을 줄일 수 있었다.
import java.util.*;
class Solution {
public int solution(int[] elements) {
Set<Integer> set = new HashSet<>();
for (int i=1; i<=elements.length; i++) {
for (int j=0; j<elements.length; j++) {
int sum = 0;
for (int k=j; k<j+i; k++) {
sum += elements[k%elements.length];
}
set.add(sum);
}
}
return set.size();
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 최소 직사각형 (Java/자바) || 코딩테스트 연습(완전탐색) (0) | 2023.10.14 |
---|---|
[프로그래머스] 구멍보트 (JAVA/자바) (0) | 2023.09.26 |
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2023.08.20 |
[프로그래머스] 리코쳇 로봇(JAVA/자바) (0) | 2023.08.04 |
[프로그래머스] 세균 증식 (JAVA/자바) (0) | 2023.08.02 |