강의로 돌아가기
조윤빈

자연수의 합을 변형한 풀이법

우리가 구하고자 하는 answer의 첫째항을 a로 가정한 후,
a를 구하면 num만큼 반복시켜 answer를 구성할 예정입니다.

total = a + (a+1) + (a+2) + ... + (a+n-1)
total = (a+n-1) + (a+n-2) + (a+n-3) + ... +a

좌변, 우변끼리 더하면
2total = (2a+n-1) + (2a+n-1) + (2a+n-1) + ... (2a+n-1) 입니다.
여기서 우변의 반복되는 항은 n개가 있으므로 다시 정리하면
2
total = (2a+n-1)n이 됩니다.

이제 a를 구해보자면...
int a = (2*total/num + 1 - num) / 2;

이제 a를 구했으니 for문으로 answer를 구성해주면 됩니다.
for(int i = 0; i < num; i++)
answer에 (a+i)를 넣는다.

작성중인 코드―solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
using namespace std;

vector<int> solution(int num, int total) {
    vector<int> answer;

    int a = (2*total/num + 1 - num) / 2;

    for(int i = 0; i < num; i++)
        answer.push_back(a + i);

    return answer;
}
  • 박선주

    우와..

    박선주―2022.11.05 23:02
  • 김창환

    등차수열의 합 공식이네요 저는 여기서 a를 유도하는걸 잘못했는데 감사합니다.

    김창환―2022.11.20 13:57
  • AhYoungJo

    덕분에 배워갑니다 감사합니다.

    AhYoungJo―2023.09.14 23:58
1 개의 답변
kkdhyun

감사합니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.