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

2025. 1. 13. 10:59·Algorithm Solving/Java

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

 

프로그래머스

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

programmers.co.kr

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


원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다.
원형 수열의 모든 원소 `elements`가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항
3 ≤ elements의 길이 ≤ 1,000
1 ≤ elements의 원소 ≤ 1,000

 

입출력 예

 

입출력 예 설명
입출력 예 #1
길이가 1인 연속 부분 수열로부터 [1, 4, 7, 9] 네 가지의 합이 나올 수 있습니다.
길이가 2인 연속 부분 수열로부터 [2, 5, 10, 11, 16] 다섯 가지의 합이 나올 수 있습니다.
길이가 3인 연속 부분 수열로부터 [6, 11, 12, 17, 20] 다섯 가지의 합이 나올 수 있습니다.
길이가 4인 연속 부분 수열로부터 [13, 15, 18, 21] 네 가지의 합이 나올 수 있습니다.
길이가 5인 연속 부분 수열로부터 [22] 한 가지의 합이 나올 수 있습니다.
이들 중 중복되는 값을 제외하면 다음과 같은 18가지의 수들을 얻습니다.
[1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22]

 


풀이

접근 방식

정답을 담을 때는 중복을 허용하지 않는 컬렉션 사용: `HashSet`

주어진 배열에서 모든 경우의 수를 탐색: 2중 for문에서 배열 인덱스 계산 

 

풀이 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        /*
        * 정답을 담을 때는 중복을 허용하지 않는 컬렉션 사용: HashSet
        * 주어진 배열에서 모든 경우의 수를 탐색
        * */

        int[] elements = {7, 9, 1, 1, 4};
        Set<Integer> answer = new HashSet<>();

        for (int i = 0; i < elements.length; i++) {
            // 인덱스가 i일 때
            int result = 0;
            for (int j = i; j < i + elements.length; j++) {
                // 길이가 j일 때
                result += elements[j % elements.length];
                answer.add(result);
                System.out.println(result);
                /* 예
                // 길이가 1일 때
                answer.add(elements[i]);
                // 길이가 2일 때
                answer.add(elements[i] + elements[i+1]);
                // 길이가 3일 때
                answer.add(elements[i] + elements[i+1] + elements[i+2]);
                // 길이가 4일 때
                answer.add(elements[i] + elements[i+1] + elements[i+2] + elements[i+3]);
                // 길이가 5일 때
                answer.add(elements[i] + elements[i+1] + elements[i+2] + elements[i+3] + elements[i+4]);*/
            }
        }

        System.out.println(answer.size());
    }
}

 


제출

import java.util.*;
class Solution {
    public int solution(int[] elements) {
        Set<Integer> answer = new HashSet<>();
        
        for (int i = 0; i < elements.length; i++) {
            // 인덱스가 i일 때
            int result = 0;
            for (int j = i; j < i + elements.length; j++) {
                // 길이가 j일 때
                result += elements[j % elements.length];
                answer.add(result);
            }
        }
        
        return answer.size();
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - n^2 배열 자르기  (0) 2025.01.15
[programmers] Java Lv.2 - H-Index  (0) 2025.01.14
[programmers] Java Lv.2 - 괄호 회전하기  (0) 2025.01.10
[programmers] Java Lv.2 - 귤 고르기  (0) 2025.01.09
[programmers] Java Lv.2 - 멀리 뛰기  (0) 2025.01.08
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - n^2 배열 자르기
  • [programmers] Java Lv.2 - H-Index
  • [programmers] Java Lv.2 - 괄호 회전하기
  • [programmers] Java Lv.2 - 귤 고르기
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    dp
    자료구조
    Google Fonts
    BFS
    그리디
    다이나믹프로그래밍
    HTML
    Firebase
    시뮬레이션
    javascript
    sql
    백트래킹
    GROUP BY
    BOJ
    백준
    jpa
    jQuery
    programmers
    CSS
    프로그래머스
    Subquery
    websocket
    완전탐색
    greedy
    mysql
    jwt
    join
    DFS
    java
    bootstrap
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - 연속 부분 수열 합의 개수
상단으로

티스토리툴바