문제
윤영이는 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;
}
'Old > 백준' 카테고리의 다른 글
백준 1991번 트리 순회 // C++ (0) | 2020.07.30 |
---|---|
백준 1408번 24 // C++ (2) | 2020.07.15 |
백준 11656번 접미사 배열 // C++ (0) | 2020.05.13 |
백준 2110번 공유기 설치 // C++ (0) | 2020.05.12 |
백준 2485번 가로수 // C++ (0) | 2020.04.22 |