본문 바로가기

코딩 테스트/PROGRAMMERS

[Java] Lv.2 연속 부분 수열 합의 개수

문제

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

1 ~ elements개(이하 k개)의 수열을 합산했을 때 나올 수 있는 수의 개수를 출력하는 문제이다.

중복 값을 없애기 위해 HashSet을 사용한다.

수열의 0번째 자리부터 시작하면서 k개의 수열의 합을 더한다.

이후 더한 합을 HashSet에 저장한다.

모든 연산이 종료된 뒤에 HashSet의 size를 확인하면 정답이 나온다.

로직은 주석으로 확인

자바 코드

import java.util.*;

class Solution {
    public int solution(int[] elements) {   
        return Calculate_CircleSeq(elements);
    }
    
    public int Calculate_CircleSeq(int[] elements){
        // 정답 저장
        HashSet<Integer> hashSet = new HashSet<Integer>();
        
        for(int i = 1; i <= elements.length; i++){ // 만드려는 연속 부분
            for(int j = 0; j < elements.length; j++){ // 시작 숫자
                int sum = 0;
                // 연속 부분만큼 합산
                for(int k = 0; k < i; k++){
                    // j번째부터 k개를 합산할 것인데
                    // j + k번째가 수열의 끝 번호보다 크면 수열의 크키만큼 빼준 위치의 수열을 더해준다.
                    if(j + k > elements.length - 1){
                        sum += elements[j + k - elements.length];
                    }else{ 그 이외는 정직하게 j + k자리의 수열을 더해준다.
                        sum += elements[j + k];
                    }                  
                }
                
                // 합산한 값을 저장
                hashSet.add(sum);
            }
        }
        
        // 저장된 해시Set의 크기만큼이 나온 정답 수
        return hashSet.size();
    }
}

 

'코딩 테스트 > PROGRAMMERS' 카테고리의 다른 글

[Java] Lv.2 택배상자  (0) 2024.06.20
[Java] Lv.2 롤케이크 자르기  (0) 2024.06.18
[Java] Lv.2 우박수열 정적분  (0) 2024.06.18
[Java] Lv.2 숫자 카드 나누기  (0) 2024.06.18
[Java] Lv.2 귤 고르기  (0) 2024.06.14