Home [C++ 프로그래머스] 연속된 수의 합
Post
Cancel

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

문제 링크

 프로그래머스

1. 문제 설명

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

입출력 예

numtotalresult
312[3, 4, 5]
515[1, 2, 3, 4, 5]
414[2, 3, 4, 5]
55[-1, 0, 1, 2, 3]

2. 풀이

입출력 예를 보면 total / num의 값은 항상 result에 포함되어 있는 것을 볼 수 있다.

그래서 나눈 값(A)에서 num 값만큼 +1씩 해서 모두 더해 total 숫자와 같은지 비교했다.

만약,

모두 더한 값 > total일 땐, A -=1 를 해서 위 내용을 반복했고

모두 더한 값 < total 일 땐, A +=1 를 해서 위 내용을 반복했다.

예를 들어,

num: 3 total:12 일 때, total/num = 4이고 num은 3이니까

4+(4+1)+(4+2) = 15 -> 15는 total(12)보다 크니까

4 -=1 를 해서 3부터 다시 시작

3+(3+1)+(3+2) = 12 -> 12 == total 정답

3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <string>
#include <vector>

using namespace std;

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

    while (true)
    {
        int sum = 0;
        
        for (size_t i = 0; i < num; i++)
        {
            answer[i] = start + i;
            sum += start + i;
        }

        if (sum == total)
        {
            return answer;
        }

        if (sum > total)
            start--;
        else
            start++;
    }
}
This post is licensed under CC BY 4.0 by the author.