View

반응형

 

알고리즘 분류: 해시맵, 누적합, 완전 탐색

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

 

프로그래머스

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

programmers.co.kr

 

 

【 문제 】

 

  • 정수로 이루어진 배열이 주어졌을 때 이를 원형 리스트로 간주한다.
  • 이때, 서로 다른 연속 부분 수열의 합의 개수를 구한다.

 

 

 

【 풀이】

 

  1. 첫 for 루프에서 연속 부분 수열의 요소 개수를 정한다.
  2. 두 번째 for 루프에서 부분 수열의 첫 요소를 제거하고, 다음 요소를 추가하면서 누적 합을 계산한다. 이때 그 누적합을 map에 저장한다.
  3. 마지막에 저장된 map의 크기가 곧 서로 다른 연속 부분 수열의 합의 개수이다.
  • 시간 복잡도: O(n^2)
  • 공간 복잡도: O(n)

 

 

 

【 코드】

 

public class Programmers_131701 {
    public int solution(int[] elements) {
        int n = elements.length;
        int sum = 0;
        Map<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < n; i++) {
            sum += elements[i];
            map.merge(sum, 1, Integer::sum);
            int temp = sum;
            for (int j = 1; j < n; j++) {
                temp -= elements[j - 1];
                temp += elements[(i + j) % n];
                map.merge(temp, 1, Integer::sum);
            }
        }

        return map.size();
    }
}
728x90
반응형

'Problem Solving > Programmers' 카테고리의 다른 글

[프로그래머스] 야근 지수 [Java]  (0) 2024.04.03
Share Link
reply
250x250
반응형
«   2024/07   »
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