문제 링크입니다: https://www.acmicpc.net/problem/5904
규칙만 잘 따라서 재귀호출하면 되는 문제였습니다.
1. S(k-1)
2. 'm' + (k+2) * 'o'
3. S(k-1)
#include <iostream>
using namespace std;
int N;
int idx;
void moo(int n)
{
if (n == 1)
{
if (idx + 1 == N)
{
cout << "m\n";
exit(0);
}
else if (idx + 2 == N || idx + 3 == N)
{
cout << "o\n";
exit(0);
}
idx += 3;
return;
}
//규칙
//1. moo(n-1)
//2. mo....o
//3. moo(n-1)
moo(n - 1);
if (idx + 1 == N)
{
cout << "m\n";
exit(0);
}
idx++;
for (int i = 0; i <= n; i++)
{
if (idx + 1 == N)
{
cout << "o\n";
exit(0);
}
idx++;
}
moo(n - 1);
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
moo(30); //2^30 > 1,000,000,000
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 9207번 페그 솔리테어 (0) | 2019.01.22 |
---|---|
백준 5988번 홀수일까 짝수일까 (0) | 2019.01.22 |
백준 10162번 전자레인지 (0) | 2019.01.20 |
백준 14956번 Philosopher's Walk (2) | 2019.01.20 |
백준 16720번 BAZE RUNNER (0) | 2019.01.20 |