Algorithm/프로그래머스
프로그래머스 - 연속 부분 수열 합의 수(JAVA)
h7ung
2023. 1. 21. 10:24
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