본문 바로가기
온라인저지

[프로그래머스] 연속된 수의 합

by plzfday 2023. 3. 19.

가장 단순하게는 num이 짝수와 홀수일 때를 나눠서 다르게 for문을 작성해 주면 되는데, 다른 분들의 정답을 보니 더 멋진 방식이 있어서 정리하고자 한다.

total은 수열의 합으로 표현하면 \(\Sigma_{k=a}^{a+n-1}{k}=A\)이다. 어떤 a부터 시작해서 a + num - 1까지의 합을 구하면 되는 것이기 때문에 문제의 핵심은 이 a를 어떻게 구하는 지로 바뀌게 된다. 방법은 주어진 num을 써먹는 것이다. 솔직히 난 이 식을 어떻게 구했는지는 모르겠다. 하지만 전개를 통해 증명은 할 수 있으니 이걸 소개하려고 한다. a를 구하는 식은 다음과 같다: \((A-\frac{n(n+1)}{2})/n+1\).

증명의 경우 A를 a부터 a+num-1의 합 대신, (1부터 i+num-1의 합) - (1부터 i-1의 합)으로 바꾸고 식을 전개하면 된다. 반복적인 작업이라 자세한 내용은 생략함을 이해해 주세요.

위의 방식을 사용하면 정답 코드가 한 줄로 나올 수 있다:

return [(total - (num * (num + 1)) // 2) // num + 1 + i for i in range(num)]

 

'온라인저지' 카테고리의 다른 글

BOJ 12865: 평범한 배낭  (0) 2022.05.21
BOJ 2981: 검문  (0) 2022.05.19
BOJ 2493번: 탑  (0) 2021.06.22
[BOJ] 15553번: 난로  (0) 2018.09.30
[BOJ] 2842번: 집배원 한상덕  (2) 2018.09.13
[BOJ] 1309번: 동물원  (0) 2018.08.31

댓글