반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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
Archives
Today
Total
관리 메뉴

욱꾸미의 주꾸미 발

[코딩테스트] 프로그래머스 - 연속 부분 수열 합의 개수(Java, Level2) 본문

코딩테스트/프로그래머스

[코딩테스트] 프로그래머스 - 연속 부분 수열 합의 개수(Java, Level2)

욱꾸미 2022. 10. 21. 23:47
반응형

안녕하세요.

요즘은 프로그래머스에서 나오는 코딩테스트 문제를 하나씩 푸는재미에 빠져있습니다.

 

나름 현업을 2년넘게 하면서 그래도 나도 이제 코딩좀 한다 생각했는데

저의 오만함을 다시 한 번 깨닫고 자바를 배울 수 있는계기가 되고 있습니다.

 

풀이를 참고하지 않은 제가 직접 푼 문제에 대해서만 포스팅 해보고자 합니다.

 

해당 문제에대한 정보는 링크를 참조해주시기 바랍니다 :D

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

 

프로그래머스

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

programmers.co.kr

 

저같은 경우는 3중 for문을 사용했습니다. 그런데 계속 시간초과가 나오더군요.

더이상 어떻게 줄이지 하다가 기존에는 ArrayList에서 indexOf를 통해 위치를 탐색 후 위치가 없으면 추가하는 방식에서

HashSet을 통해 중복없이 값을 넣었습니다.

 

그제서야 성공했습니다.

 

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        int elementsLength=elements.length;
        
        int sum=0;
        
        HashSet<Integer> answerList=new HashSet<>();
        
        
        //먼저 길이를 지정할 for문하나 만들기
        for(int i=1;i<=elements.length;i++)
        {
            //길이에 대한 시작점 설정
            for(int position=0;position<elements.length;position++)
            {
                //해당하는 값들을 sum에 저장
                for(int j=position;j<position+i;j++)
                {
                    sum=sum+elements[j%elements.length];
                }
                // 합을 answerList에 저장. 중복시 제외
                answerList.add(sum);
                sum=0;
            }         
        }
        answer=answerList.size();
        return answer;
    }
}
반응형