[프로그래머스] Lv.2 연속 부분 수열 합의 개수 (Java)

2023. 6. 19. 12:42·Algorithms(CT)/Programmers

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

철호는 수열을 가지고 놀기를 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어 졌습니다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다. 예를 들어 수열 [7,9,1,1,4]로 원형 수열을 만들면 다음과 같습니다.

원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다. 

원형 수열의 모든 원소 elements가 순서대로 주어질 때, 원형수열의 연속 부분 수열의 합으로 만들 수 있는 수의 개수를 return 하도록 solution함수를 완성해주세요.


풀이 생각하는 과정

  • 제한 사항에 elements의 길이의 최대 1000으로 이중반복문을 돌리더라도 시간 제약에 걸리지 않을 것이라고 생각해 반복문을 사용해 풀이하였습니다.
  • elements의 원소의 최댓값이 1000이고, 최대 1000개의 길이가 있을 것을 생각해 봤을 때 모든 원소의 합이 최대 1,000,000으로 long형으로 선언해주지 않아도 됩니다.

풀이 과정

  1. 연속 부분수열의 합을 저장하기 위해 HashSet을 사용합니다.
  2. 연속된 부분수열의 시작점을 elements의 0번째 원소로 지정합니다.
  3. 시작점만으로도 연속된 부분수열이기 때문에 시작점을 set에 넣습니다.
  4. 시작점부터 연속되는 다음 원소의 합을 구하고, 그 값 또한 set에 넣습니다.
  5. 4번의 과정을 elements의 원소를 다 더할 때까지 반복합니다.
  6. 다시 2번으로 돌아가 시작점을 1번 원소로 지정하고 3-5 과정을 반복합니다.
  7. 시작점 또한 elements의 마지막 원소까지 과정을 진행합니다.
  8. 반복문이 종료된 후, 연속부분수열의 합이 모두 저장된 set의 size를 return 합니다.

 

전체 코드

import java.util.*;
class Solution {
    public int solution(int[] elements) {
        
        Set<Integer> total = new HashSet<>();
        
        for(int start=0;start<elements.length;start++){//합의 시작점
            int sum=elements[start];
            total.add(sum);
            
            for(int i=1;i<elements.length;i++){ //연속되는 부분 수열
           	 //원형 수열로 index값이 배열을 넘어가게 하지 않기 위해 idx 처리해줌.
                int idx = (start+i)%elements.length;
                sum+=elements[idx];
                total.add(sum);
            }
        }
        
        return total.size();
    }
}

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스] Lv.4 징검다리 (Java)  (0) 2023.06.26
[Java] Lv.2 N진수 게임  (0) 2023.06.24
[프로그래머스][Java] Lv.2 k진수에서 소수 개수 구하기  (0) 2023.06.22
[프로그래머스] Lv2. 뉴스 클러스터링 (Java)  (0) 2023.06.21
[프로그래머스] Lv.2 n^2 배열 자르기 (Java)  (0) 2023.06.19
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [Java] Lv.2 N진수 게임
  • [프로그래머스][Java] Lv.2 k진수에서 소수 개수 구하기
  • [프로그래머스] Lv2. 뉴스 클러스터링 (Java)
  • [프로그래머스] Lv.2 n^2 배열 자르기 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    스택
    구름톤 챌린지
    LV.3
    Greedy
    LV.2
    구름
    백준
    제대로 파는 자바스크립트
    따라하며 배우는 html css
    프로그래머스
    IT 5분 잡학사전
    BFS
    lv2
    IT 잡학사전
    개발자북클럽
    코딩테스트
    노마드코더
    DFS
    DP
    인프런
    HTML
    호텔 대실
    Til
    BOJ
    Lv.1
    자바
    그리디
    lv.4
    존안님
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.2 연속 부분 수열 합의 개수 (Java)
상단으로

티스토리툴바