-
8.28.프로그래머스 문제TIL( Today I Learned) 2023. 8. 29. 11:08
8.28- 뒤늦게 올립니다.
같은 문제인데 전혀 다른 접근에 언뜻 이해가 쉽지 않아서 공부했습니다.
- 연속된 수의 합
문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다.
연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
num total result 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] 입출력 예 설명
입출력 예 #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입니다.
내풀이
def solution(num, total):
answer = []
start = (2 * total - num * (num - 1)) // (2 * num)
for i in range(num):
answer.append(start + i)
return answer
num = int(input("Enter the number you want as num consecutive numbers "))
total = int(input("enter the total number "))
print(solution(num,total))def solution(num, total): answer = [] start = (2 * total - num * (num - 1)) // (2 * num) for i in range(num): answer.append(start + i) return answer다른 사람 풀이
그냥 공식을 이용한 나와 생각이 비슷하나 list comprehension 을 살펴봤다.
def solution(num, total): return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]보다 직관적 - 내가 보기엔 가장 훌륭
def solution(num, total): answer = [] var = sum(range(num+1)) diff = total - var start_num = diff//num answer = [i+1+start_num for i in range(num)] return answerdef solution(num, total): # base # offset # # sum of offsets = num(num-1) / 2 base = total - num * (num-1) / 2 base = int(base // num) answer = [i for i in range(base, base+num)] return answerdef solution(num, total): lis = [i for i in range(-total-num, num+total+1)] i = 0 while sum(lis[i:i+num]) != total: i += 1 return lis[i:i+num]def solution(num, total):if num % 2 == 1:return list(range(total//num-num//2, total//num+num//2+1))else:return list(range(total//num-num//2+1, total//num+num//2+1))'TIL( Today I Learned)' 카테고리의 다른 글
9.5 (0) 2023.09.05 8.29 . 경사하강법 (0) 2023.08.29 8.26. 프로그래머스 에서 배우는 파이썬 문법 : if not x: (0) 2023.08.26 8.14.월요일 (0) 2023.08.14 8.13.일요일 (0) 2023.08.13