티스토리 뷰

728x90

문제링크

 

 

 

문제 풀이 과정

투포인터를 이용하면 간단하게 해결되는 문제이다.

부분 수열의 합이 중복 되면 안되므로 부분수열의 합을 HashSet 에 저장하여 나중에 HashSet 의 size 를 출력하면 부분 수열의 합의 수가 출력이 된다.

 

HashSet<Integer> sumSet = new HashSet<>();
for(int item : elements){
    sumSet.add(item);
}

 

부분 수열의 길이가 1인 경우는 배열 원소가 해당 되므로 우선 배열 원소 각각을 set 에 넣어 주었다.

 

 

 

부분 수열의 길이가 2일때 초기 start 와 end 를 start 는 0, end 는 start + i(간격) 으로 지정해준다.

start 부터 end 까지의 합을 sum 에다 저장해둔다.

 

 

그다음 부분수열로 움직일때 sum 에서 start 값을 뺀뒤 end + 1 위치의 값을 더해주면 부분수열의 길이가 2인 두번째 합이 나온다.

이것을 start 가 배열의 끝으로 갈때까지 반복하면 된다.

 

 

전체 코드

 

728x90