욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 금강삼도 식후경, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다. 그래서 욱제는 3을 가지고 놀아보기로 했삼.
3개 숫자(0, 1, 2)만 가지고 N자리 3의 배수를 만들어 보삼. 만드는 배수는 자연수 이삼. 0으로 시작하는 수는 만들 수 없는 수 이삼. 3의 배수가 몇 개나 나올 수 있삼?
3의 배수가 되려면 각 자리수를 더한 합이 3의 배수가 되어야 한다.
N의 범위가 최대 9이므로 브루트 포스로 풀면된다!
#include <iostream>
#include <string>
using namespace std;
int N;
int cnt = 0;
void brute_force(string& str, int cur) {
str += cur + '0';
if (str.length() == N) {
// 3의 배수가 되는지 검사
int sum = 0;
for (int i = 0; i < N; ++i) {
sum += str[i] - '0';
}
if (sum % 3 == 0) {
cnt++;
}
return;
}
else {
for (int i = 0; i < 3; ++i) {
brute_force(str, i);
str.pop_back();
}
}
}
int main(void) {
cin >> N;
for (int i = 1; i < 3; ++i) {
string str = "";
brute_force(str, i);
}
cout << cnt << "\n";
return 0;
}