본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 131701번: 연속 부분 수열 합의 개수 [Java]

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

 

프로그래머스

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

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(int[] elements) {
        Set <Integer> set = new HashSet<>();
        for(int i = 0; i < elements.length; i++) {
            int sum = 0;
            for(int j = 0; j < elements.length; j++) {
                sum += elements[(i + j) % elements.length];
                set.add(sum);
            }
        }
        return set.size();
    }
}

2. 설명

Set을 이용하여 중복된 값을 제거하며 반복문을 통해서 모든 경우의 부분 수열을 구합니다. 만약 인덱스 값을 넘어간다면 elements 크기만큼의 나머지를 인덱스로 지정하면 0부터 시작되어 마치 원으로 이어진 것처럼 진행이 가능합니다.

3. 정리

  1. Set을 이용한 중복 제거
  2. 배열에서 % 연산자 활용
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges