티스토리 뷰
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 가 배열의 끝으로 갈때까지 반복하면 된다.
전체 코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.HashSet; | |
class Solution { | |
public int solution(int[] elements) { | |
int len = elements.length; | |
HashSet<Integer> sumSet = new HashSet<>(); | |
for(int item : elements){ | |
sumSet.add(item); | |
} | |
int start = 0; | |
int end = 0; | |
for (int i = 1; i < len ; i++) { | |
int sum = 0; | |
start = 0; | |
end = (start + i) % len; | |
for (int j = start; j <= end ; j++) { | |
sum += elements[j]; | |
} | |
sumSet.add(sum); | |
end = (end + 1) % len; | |
for (int j = start + 1; j < len ; j++) { | |
sum = sum - elements[j - 1]; | |
sum = sum + elements[end]; | |
sumSet.add(sum); | |
end = (end + 1) % len; | |
} | |
} | |
return sumSet.size(); | |
} | |
} |

728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 메뉴 리뉴얼 (JAVA) (0) | 2023.01.22 |
---|---|
프로그래머스 - 방문 길이 (JAVA) (0) | 2023.01.22 |
프로그래머스 - 멀리 뛰기 (JAVA) (0) | 2023.01.21 |
프로그래머스 - 캐시 (JAVA) (0) | 2023.01.20 |
프로그래머스 - 호텔 방 배정 (JAVA) (0) | 2023.01.20 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 취업준비
- 기술 면접 준비
- 알고리즘공부
- 코테 준비
- 코테공부
- 코딩테스트 준비
- 알고리즘 공부
- 주니어 개발자 취업 준비
- 프로그래머스 자바
- 취업 준비
- 개발자 취업 준비
- 자바공부
- 제로베이스 백엔드 스쿨
- 프로그래머스 카카오
- 개발자 면접 준비
- 코딩테스트 공부
- 백준
- 제로베이스 백준 장학금
- 코딩테스트공부
- 백엔드 개발자 취업 준비
- 알고리즘
- 자바
- 코테준비
- 프로그래머스
- 개발자 취준
- 취준
- java
- 코딩테스트
- 백엔드 개발자
- 백엔드 개발자 기술 면접 준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함