카테고리 없음

프로그래머스 8일차 - 연속된 수의 합

알면 알 수록 재밌다! 2023. 2. 21. 08:33
문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

제한사항
1 ≤ num ≤ 100
0 ≤ total ≤ 1000
num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

입출력 예 설명
입출력 예 #1
num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.
입출력 예 #2
num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.
입출력 예 #3
4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.
입출력 예 #4
설명 생략

 

이 문제는 음수가 리스트에 포함될 수도 있다는 것을 생각해야한다. 또한, total = 0일 때 nums = 3이라면 [0,0,0]처럼 중복값은 나오게 하면 안된다. 즉, 연속된 수가 나와야한다.

 

def solution(num, total):
    average = total // num
    k = [i for i in range(average - (num-1)//2, average + (num + 2)//2)]
    return k

솔직히 못풀었고 다른 사람 풀이를 봤다.

우선 average = total // num를 하는 이유는 입출력 예를 보면 12 //3 을 한 값이 리스트의 중앙에 나와있는 것을 볼 수 있다.

그래서 이걸 중앙값으로 사용한다.

 

그리고 range(average - (num-1)//2, average + (num + 2)//2) 가 이해가 안갔는데,

num-1는 범위의 왼쪽에 대한 최대값를 줄 수 있고 num+2범위의 오른쪽에 대한 최대값을 얻기 위한 것이라고 한다.

 

즉, (num-1)//2의 최종 목록을 형성하기 위해 평균값의 왼쪽에 필요한 정수 최소값을 제공하고

(num+2)//2범위의 오른쪽이 포함되도록 하여 필요한 정수의 전체 범위, 정수 최대값을 제공한다.

 

그 범위를 리스트에 담아서 리턴해준다.