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

2024. 12. 2. 12:12·Algorithm/Programmers
//연속 부분 수열만을 다룬다.
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        int count = elements.length;
        int[] list = new int[count * 2];
        Set<Integer> numSet = new HashSet<>();
        
        for(int i = 0; i < count; i++) {
            list[i] = elements[i];
            list[i + count] = elements[i];
        }
        
        while(count > 0) {
            int sumLength = elements.length - count;
            
            for(int i = 0; i < elements.length; i++) {
                int sumNum = 0;
                
                for(int j = i; j <= i + sumLength; j++) {
                    sumNum += list[j];
                }
                
                numSet.add(sumNum);
            }
            
            count--;
        }
        
        answer = numSet.size();
        
        return answer;
    }
}

 

풀이

1. 연속된 수를 만들기 위해서 뒤에 같은 길이의 수들을 붙여준다. (이게 은근히 코딩테스트 문제에서 많이 쓰이는 것 같다.)

2. 그리고 elements.length만큼만 사용해서 반복되기 이전의 수들까지만 사용한다. 73114 73114 일때 다시 뒤의 7부터 계산은 필요X

3. 3의 길이일 때 7+3+1, 3+1+1, 1+1+4, 1+4+7, 4+7+3 이렇게 계산 11 5 6 12 14 이런 수들의 합을 set에 저장해서 값들이 겹치지 않게 모두 보관해서 set의 길이를 제출한다.

 

느낀점

sumNum += elements[j % elements.length];

%으로 나머지 계산을 해서 list를 따로 만들지 않게 하는 방법도 있지만 코드가 간편해지지만 그만큼 계산을 많이하게되어 계산 시간이 길어진다. list를 따로 사용할 때는 메모리를 그만큼 사용한다. 근데 list의 크기가 최대 1000 * 2로 그리 크지 않기에 상관없어보인다.

%계산으로 list를 대체했을 때
list로 새로 만들어주었을때

상황에 따라서 맞춰서 사용하는 편이 좋아보인다.

 

 

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

저작자표시 (새창열림)

'Algorithm > Programmers' 카테고리의 다른 글

[JAVA] 프로그래머스 괄호 회전하기  (1) 2024.12.05
[JAVA] 프로그래머스 할인행사  (0) 2024.12.04
[JAVA] 프로그래머스 예상 대진표  (1) 2024.11.30
[JAVA] 프로그래머스 귤 고르기  (0) 2024.11.25
[JAVA] 프로그래머스 리코쳇 로봇  (0) 2024.09.10
'Algorithm/Programmers' 카테고리의 다른 글
  • [JAVA] 프로그래머스 괄호 회전하기
  • [JAVA] 프로그래머스 할인행사
  • [JAVA] 프로그래머스 예상 대진표
  • [JAVA] 프로그래머스 귤 고르기
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    SpringSecurity
    티스토리챌린지
    오블완
    c++ 기초 플러스
    프로그래머스
    백준
    JPA
    알고리즘
    spring
    위클리 챌린지
    dp
    dfs
    JWT
    Java
  • hELLO· Designed By정상우.v4.10.0
chanheess
[JAVA] 프로그래머스 연속 부분 수열 합의 개수
상단으로

티스토리툴바