우당탕탕 개발일지

[연습문제] 프로그래머스 level 2 연속 부분 수열 합의 개수 (Python 파이썬) 본문

알고리즘

[연습문제] 프로그래머스 level 2 연속 부분 수열 합의 개수 (Python 파이썬)

민아당긴아 2024. 10. 15. 19:29

💡문제 링크

 

프로그래머스

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

programmers.co.kr

 

 

💡문제 분석 요약

원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return하는 함수 작성

 

💡알고리즘 설계

직선 수열 형태의 elements를 2배해서 두 번 작성하기

예. elements = [7, 9, 1, 1, 4] -> elements 2배 = [7, 9, 1, 1, 4, 7, 9, 1, 1, 4]

 

💡코드

def solution(elements):
    l = len(elements)
    elements *= 2
    s = []
    for i in range(1, l+1):
        s += [sum(elements[j:j+i]) for j in range(l)]
    return len(list(set(s)))

 

💡 다른 풀이

def solution(elements):
    l = len(elements)
    elements += elements
    s = []
    for i in range(1, l+1):
        for j in range(l):
            s.append(sum(elements[j:j+i]))
    return len(list(set(s)))

처음에는 이렇게 했다. 

리스트문 [ ] 안에 for문을 써서 반복문 코드 길이를 줄였다.

elements += elements 대신에 elements *= 2로 바꿔줬다.