코딩 테스트/Python

85. 연속 부분 수열 합의 개수

susinlee 2025. 1. 8. 10:23

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

 

[풀이]

1. 원형리스트를 구현하기 위해 elements를 늘려주고

2. 연속 부분 수열의 길이마다 초기합을 구해준 뒤

3. 이전 값(start-1) 하나를 빼고 다음 값(start + length - 1)을 더하는 방식으로 합을 추가

 

def solution(elements):
    n = len(elements)
    elements = elements * 2  # 원형 리스트 구현
    answer = set()

    # 부분 수열의 길이를 1부터 n까지 처리
    for length in range(1, n + 1):
        current_sum = sum(elements[:length])  # 초기 부분합 계산
        answer.add(current_sum)
        
        # 슬라이딩 윈도우 방식으로 합 계산
        for start in range(1, n):
            current_sum = current_sum - elements[start - 1] + elements[start - 1 + length]
            answer.add(current_sum)

    return len(answer)

'코딩 테스트 > Python' 카테고리의 다른 글

83. 귤고르기  (0) 2025.01.06
82. 멀리 뛰기  (1) 2025.01.05
신고 결과 받기  (0) 2025.01.02
공원 산책  (0) 2024.12.31
달리기 경주  (1) 2024.12.30