Old/백준

백준 16561번 3의 배수 // C++

mang_dev 2020. 7. 15. 22:29

문제

3의 배수

윤영이는 3의 배수 마니아이다. 그는 모든 자연수를 3개의 3의 배수의 자연수로 분해하는 것을 취미로 가지고 있다. 문득 그는 자신에게 주어진 수를 3개의 3의 배수로 분리하는 경우의 수가 몇 개인지 궁금해졌다. 하지만 윤영이는 마지막 학기이기 때문에 이런 계산을 하기에는 너무 게을러졌다. 그래서 당신에게 이 계산을 부탁했다.

즉, 임의의 3의 배수 자연수 n이 주어졌을 때, 해당 수를 3의 배수의 자연수 3개로 분리하는 방법의 개수를 출력해라. 단 분해한 수의 순서가 다르면 다른 방법으로 간주한다. 예를 들어 12 = 3 + 6 + 3 과 12 = 3 + 3 + 6 은 다른 방법이다.임의의 3의 배수 자연수 n이 주어진다. (3 ≤ n ≤ 3000)

입력

임의의 3의 배수 자연수 n이 주어진다. (3 ≤ n ≤ 3000)

출력

자연수 n을 분해하는 방법의 개수를 출력하라.


풀이

3개의 3의 배수로 임의의 수 n을 표현하는 경우의 수는, 마지막 3번째 수는 고려하지 않아도 된다.

앞의 두 수에 따라 자동으로 마지막 수가 결정되기 때문이다.

따라서, (n - 앞의 두 수를 더한 값) 이 3 이상이 된다면 하나의 경우라고 볼 수 있다.


코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
#include <iostream>

using namespace std;

int main() {
    int n;

    cin >> n;

    int count = 0;
    int sum = 0;

    for (int i = 1; i < n / 3; i++) {
        sum = i * 3;

        for (int j = 1; j < n / 3; j++) {
            int tempSum = sum + j * 3;

            if (n - tempSum >= 3) {
                count++;
            }
        }
    }

    cout << count;

    return 0;
}