반응형
재귀를 이용해 풀었습니다(백트레킹 방식.)
풀이방법 :
일반적인 정적 배열 할당으로는 풀 수가 없습니다. 최대 배열 크기 2^15 x 2^15 개 = 20억 이상. 따라서 고려할 수 있는 것은 재귀 또는 특정 공식을 찾아 푸는 것입니다.
Code :
#include <iostream>
#include <cmath>
using namespace std;
int n,r,c,ans=0;
int dx[4] = {0,0,1,1};
int dy[4] = {0,1,0,1};
void fillBoard(int n,int x,int y){
if(n==2){
for(int i = 0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx== r && ny == c){
cout << ans;
return;
}
ans++;
}
return;
}
fillBoard(n/2,x,y);
fillBoard(n/2,x,y+n/2);
fillBoard(n/2,x+n/2,y);
fillBoard(n/2,x+n/2,y+n/2);
}
int main(){
cin >> n >> r >> c; // 2*n X 2*n의 판에서 (r,c)는 무슨 숫자?
fillBoard(1<<n,0,0);
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 1927번 : 최소 힙 답 (0) | 2020.09.08 |
---|---|
(C++) - 백준(BOJ) 1620번 : 나는야 포켓몬 마스터 이다솜 답 (0) | 2020.09.08 |
(Python) - 백준(BOJ) 16829번 : Hashing 답 (0) | 2020.08.23 |
(Python) - 프로그래머스(Programmers) : 전화번호 목록 답 (0) | 2020.08.16 |
(C++) - 프로그래머스(Programmers) : 완주하지 못한 선수 답 (0) | 2020.08.15 |