1. 팩토리얼
#include <iostream>
using namespace std;
int n;
int a=1;
void run(int le) {
a *= le;
if (n <= 1) {
cout << 1;
return;
}
if (le == n) {
cout << a;
return;
}
run(le + 1);
}
int main() {
cin >> n;
run(1);
return 0;
}
2. 피보나치 수 5
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<int> p;
void run(int le) {
if (le == n) {
cout << p[n];
return;
}
p.push_back(p[le] + p[le - 1]);
if (n <= 1) {
cout << n;
return;
}
run(le + 1);
}
int main() {
cin >> n;
p.push_back(0);
p.push_back(1);
run(1);
return 0;
}
3. 별 찍기 - 10
#include<iostream>
using namespace std;
// n=3인경우 -> (1,1) (1,4) (1,7) (1,10),...
// n=9인경우 -> (3,3) (3,4) (3,5) / (4,3) (4,4) (4,5) / (5,3) (5,4) (5,5)
void run(int i, int j, int n) {
if ((i / n) % 3 == 1 && (j / n) % 3 == 1) {
cout << " ";
}
else {
if (n / 3 == 0)
cout << "*";
else {
run(i, j, n/3);
}
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
run(i, j, n);
}
cout << '\n';
}
return 0;
}
4. 하노이 탑 이동 순서
//하노이탑 이동경로 -> N번째 판을 c로 이동시키기위해 N-1까지 b로 먼저 이동, b에서 c로 이동
//시간초과시 endl -> \n 변경 (그래도 시간초가나오면 scanf, printf)
#include <iostream>
#include <vector>
#include <cmath> //pow사용시 필요함
using namespace std;
// ㅡ ㅡ ㅡ
// A B C
//A판에있는 n-1개의 원판을 B판으로
//A판에 남은 가장 큰원판을 C판으로
//B판의 n-1개의 원판을 C판으로
void hanoi(int n, int start, int by, int to) { //원판수, 출발지, 경유지, 목적지
//재귀를 돌면서 출발지, 경유지, 목적지가 섞임
if (n == 1)
cout << start << " " << to << '\n';
else {
hanoi(n-1, start, to, by); //a판의 n-1개의 원판을 b판으로 옮기는 과정
//a판에서 c판을 이용해 b판으로 옮긴다.
cout << start << " " << to << '\n'; //a판의 가장큰 원판 c판으로 옮기기 출력
hanoi(n - 1, by, start, to); //b판의 n-1의 원판을 c판으로 옮기는 과정
//b판에서 a판을 이용해 c판으로 옮긴다.
}
}
int main() {
int n;
cin >> n;
int count=1;
// 이동횟수는 2의 n제곱 -1
for (int i = 1; i <= n; i++) {
count *= 2;
}
cout << count - 1 << '\n';
hanoi(n, 1,2,3); //a판 b판 c판
return 0;
}
'APS > 백준' 카테고리의 다른 글
[2512] 예산 C++ (0) | 2022.02.09 |
---|---|
[1920] 수 찾기 C++ (0) | 2022.02.08 |
[3273] 두 수의 합 (0) | 2021.08.25 |
[단계별로 풀어보기] 백트래킹 (0) | 2021.08.20 |
[단계별로 풀어보기] 브루트 포스 (0) | 2021.08.16 |