2023. 2. 25. 23:32, 알고리즘/BOJ
#include <bits/stdc++.h>
using namespace std;
void func(int a, int b, int n) {
if (n == 1) {
cout << a << ' ' << b << '\n';
return;
}
func(a, 6 - a - b, n - 1);
cout << a << ' ' << b << '\n';
func(6 - a - b, b, n - 1);
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int k;
cin >> k;
cout << (1 << k) - 1 << '\n';
func(1, 3, k);
}
하노이탑 최소 이동 횟수의 경우 a(1)=1, a(n)=2a(n-1)+1이고, 이걸 일반항으로 나타내면 a(n)=2^n-1인데,
그래서 그 최소이동 횟수를 출력하는 부분에서
cout<<(1<<k)-1<<'\n'; 으로 이루어져 있는데, 여기서
(1<<k)은 비트쉬프트 연산자를 나타내는 부분이고, 이 부분은 1*2^k와 같은 값을 나타낸다.
그리고 이 부분은 #include <bitset>을 통해서 bitset헤더를 사용해서 사용하게 만든 부분이고,
이렇게 식을 작성함으로 해서 더 빠르고 간결하게 2의 거듭제곱을 나타낼 수 있다.
이와 관련된 비트연산자에 대해서는 참고가 될만한 블로그 글을 첨부한다. 나중에 시간나면 다시 한번 읽어보도록 하자.
비트플래그와 비트마스크 또한 게임개발을 하는데 요긴하게 사용할 수 있는 부분이니까, 공부를 잘 해보도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
0x0C강-백트래킹. 백트래킹과 DFS 차이점은? (0) | 2023.02.28 |
---|---|
0x0B-재귀. 스트링을 출력할때 const char* 의 사용에 관하여. (0) | 2023.02.26 |
0x0B-재귀. 함수의 반환 형식에 따라서 return을 통한 함수의 종료에서 넣어주는 값이 다르다. (0) | 2023.02.24 |
0x09강-BFS. fill문을 통한 배열 내의 원소들의 값 변경하기. (0) | 2023.02.24 |
0x09-BFS. for문의 실행에서 순차적 수의 변화가 아닐때의 for문의 활용 (0) | 2023.02.24 |
Comments, Trackbacks