연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
num | total | answer |
---|---|---|
3 | 12 | [3,4,5] |
5 | 15 | [1,2,3,4,5] |
4 | 14 | [2,3,4,5] |
5 | 5 | [-1,0,1,2,3] |
입출력 예 설명
while
문을 사용해야겠네. end값을 모르니까.1. start = total+1
2. while True:
3. lst = start-num 부터 start까지의 수
4. lst의 합 == total:
5. return lst
6. start -= 1
def solution(num, total):
start = total+1
while True:
lst = list(range(start-num,start))
if sum(lst) == total:
return lst
start -= 1
다른 아이디어는 total / num으로 나눈 수, 즉 중앙값을 활용하는 것이다.
num이 짝수면 중앙값을 2개의 수로 num이 홀수면 중앙값을 1개로 두고 주변 숫자를 리스트에 추가하면서 생성하면 될 것 같다.
def solution(num, total):
mid = total // num
res = [mid] if num%2 else [mid, mid+1]
while len(res) < num:
res.insert(0, res[0]-1)
res.append(res[-1]+1)
return res
result = 로, 모두 더한 값이 total이 된다.
등차수열의 합 공식을 이용하면, total은 초항이 x, 마지막 항이 num-1이고 등차가 1인 등차수열의 합으로 표현할 수 있다.
코드를 인용하면 이렇다.
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
(연속된 수의 합공식을 이용해보려고 했다가 포기했는데 등차수열의 합 공식이 있었다. 다 배운건데 활용하는 게 어렵구나..)