알고리즘/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를 사용하여 배열을 넘어서는 일이 없도록 하고, 다시 처음으로 돌아갈 수 있도록 한다. 

제대로 푸는 문제가 딱히 없는 것 같아서 걱정이다.......

반복문을 세번이나 돌아가는 만큼 성능을 고려해보아야 할 것 같다.