[level 2] 연속 부분 수열 합의 개수 - 131701
성능 요약
메모리: 72.8 MB, 시간: 5027.91 ms
구분
코딩테스트 연습 > 연습문제
채점결과
Empty
문제 설명
철호는 수열을 가지고 놀기 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어졌습니다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다. 예를 들어 수열 [7, 9, 1, 1, 4] 로 원형 수열을 만들면 다음과 같습니다.
원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다.
원형 수열의 모든 원소 elements
가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤
elements
의 길이 ≤ 1,000 - 1 ≤
elements
의 원소 ≤ 1,000
입출력 예
elements | result |
---|---|
[7,9,1,1,4] | 18 |
입출력 예 설명
입출력 예 #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]
나의 틀린 풀이
일단 그냥 순열 코드를 작성했지만 막힘. 연속된 수만 허용해야 하는데, 연속하지 않은 수도 허용해서 그런듯
현재 코드에서 전체 완성 후 검사는 낭비가 심하니까 조건을 추가해야하는데, 그냥 순열코드를 갈아 엎고 3중 for문으로 작성함(아래 코드) 하지만 시간초과 발생 N이 1000인데 3중 for문이면 어지간하면 시간초과 나는게 맞긴 하다는 생각이 듬
def solution(elements):
lst = []
# i = 부분 수열 길이
for i in range(1,len(elements)+1):
# j = 시작위치
for j in range(len(elements)):
sel = []
# k = 얻어야할 연속된 개수
for k in range(i):
sel.append(elements[((j+k)%len(elements))])
lst.append(sum(sel))
answer = list(set(lst))
return len(answer)
나의 맞은 풀이
3중 for문에서 마지막 연산을 슬라이싱으로 변경하니 해결하였음
다른사람의 코드를 보니 나의 lst를 아예 set으로 선언하고 append가 아닌 add로 처음부터 set을 사용했다면 더 좋았겠다는 생각이 들었음.
def solution(elements):
lst = []
length = len(elements)
# i = 부분 수열 길이
for i in range(1,length+1):
# j = 시작위치
for j in range(length):
if j + i > length:
lst.append(sum(elements[j:]+elements[:j+i-length]))
else:
lst.append(sum(elements[j:j+i]))
answer = set(lst)
return len(answer)
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] n^2 배열 자르기 - python[ 구현 ] (0) | 2023.09.16 |
---|---|
[프로그래머스] 괄호 회전하기 - python[ 문자열, 구현 ] (0) | 2023.09.16 |
[프로그래머스] 모음 사전- python[ Permutation ] (0) | 2023.09.13 |
[프로그래머스] 소수 찾기- python[ Brute Force] (0) | 2023.09.11 |
[프로그래머스] H-Index - python[ 정렬 ] (0) | 2023.09.11 |