인기 검색어

개발/알고리즘

[프로그래머스] Lv2. 연속 부분 수열 합의 개수

  • -

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/131701

 

프로그래머스

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

programmers.co.kr

 

풀이

주어진 배열(elements)를 두 개 이어붙인 배열을 만들어서 1개부터 elements의 길이 수까지 합을 set(HashSet)에 더해가면,

set에서 중복이 제거되어 마지막에 set의 길이를 정답으로 제출

정답 코드

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int[] eles = new int[elements.length * 2];
        HashSet<Integer> set = new HashSet<>();
        
        for(int j = 0; j < elements.length * 2; j++) {
            eles[j] = elements[j % elements.length];
        }
        
        for(int r = 1; r < elements.length+1; r++) {
            for(int i = 0; i < elements.length; i++) {            
                int temp = 0;
                for(int j = i; j < i + r; j++) {
                    temp = temp + eles[j];
                }
                set.add(temp);
            }
        }
        
        return set.size();
    }
}

 

 

 

다른 사람의 풀이 중 깔끔 했던 코드

더보기
import java.util.*;

class Solution {
        public int solution(int[] elements) {
            Set<Integer> set = new HashSet<>();
            int[] dp = new int[elements.length];
            for(int len = 1;len <= elements.length; len++){
                for(int i = 0;i<elements.length;i++){
                    dp[i] += elements[(len+i-1)%elements.length];
                    set.add(dp[i]);
                }
            }
            return set.size();
        }
    }
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.