๋ฌธ์
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N, M, ans;
int map[26][26];
int dx[3] = {-1,0,-1};
int dy[3] = {0,-1,-1};
bool check(int x, int y){
int cnt = 0;
for(int i = 0; i<3; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx>=0 && nx < N && ny>=0 && ny< M){
if(map[nx][ny]) cnt++;
}
}
if(cnt == 3) return false;
return true;
}
void backtracking(int x, int y){
if(x == N-1 && y == M){
ans++;
return;
}
if(y == M){
y = 0;
x++;
}
map[x][y] = 1;
if(check(x, y)) backtracking(x, y+1); // 2*2๊ฐ ์ ๋ง๋ค์ด์ง๋ ๋ด๋ชจ๋ฅผ ์ฌ๋ฆฐ๋ค.
map[x][y] = 0;
backtracking(x, y+1); // ํ์ฌ์นธ์๋ ๋ด๋ชจ๋ฅผ ์ฌ๋ฆฌ์ง์๊ณ ๋์ด๊ฐ๋ค.
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
backtracking(0,0);
cout<<ans;
}
ํ์ด
์ฒ์์ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ๊ฐ ์กฐ๊ธ ์ด๋ ค์ ๋๋ฐ ์ด ๋ฌธ์ ๋ ๋ด๋ชจ๊ฐ 2*2๊ฐ ๋ง๋ค์ด์ง์ง ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ ๋๋ค.
๋ด๋ชจ๋ฅผ ๋๋ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด๋ชจ | ||
๋ด๋ชจ | ๋ด๋ชจ | |
๋ด๋ชจ | ๋ด๋ชจ | ๋ด๋ชจ |
๋ด๋ชจ | ๋ด๋ชจ | ๋ด๋ชจ |
๋ด๋ชจ |
๋ด๋ชจ | ๋ด๋ชจ | ๋ด๋ชจ |
๋ด๋ชจ | ๋ด๋ชจ |
๊ฒฝ์ฐ์ ์ ์นด์ดํ ++
์ฆ, ๊ฐ๋ก์ ๋จผ์ ๋ด๋ชจ๋ฅผ ๋ฐฐ์นํ๊ฒ๋ ๊ตฌํํ์ต๋๋ค. ์ด ๋ฐฉ์์ผ๋ก ๋์ผ๋ฉด ํ์ฌ ๋์ ๋ด๋ชจ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ข์ธก, ์์ธก, ์ข์ธก ๋๊ฐ์ ์ด ์ธ ๊ฐ๋ง ๋ด๋ชจ์ธ์ง๋ฅผ ํ์ธํ๋ฉด 2*2 ๋ด๋ชจ๊ฐ ๋ง๋ค์ด์ง๋์ง๋ฅผ ํ๋ณํ ์ ์์ต๋๋ค.
ํ์ฌ ์์น์ ๋ด๋ชจ๋ฅผ ๋์์ ๋ 2*2๊ฐ ๋ง๋ค์ด์ง๋ฉด ํ์ฌ ์ํฉ์์๋ ์ด ์์น์์๋ ๋์ง ์๋ ๊ฒฝ์ฐ๋ง ์กด์ฌํฉ๋๋ค.
2*2๊ฐ ๋ง๋ค์ด์ง์ง ์๋๋ค๋ฉด ์ด ์์น์ ๋๋๊ฒฝ์ฐ์ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํฉ๋๋ค.
์ด๋ฐ ์์ผ๋ก ๋ฐฑํธ๋ํน์ ๋๋ ค์ ์ต์ข ์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 2661๋ฒ - ์ข์์์ด (0) | 2022.08.21 |
---|---|
[๋ฐฑ์ค,c++] 18430๋ฒ - ๋ฌด๊ธฐ ๊ณตํ (0) | 2022.08.21 |
[๋ฐฑ์ค,c++] 1174๋ฒ - ์ค์ด๋๋ ์ (0) | 2022.08.21 |
[๋ฐฑ์ค,c++] 16987๋ฒ - ๊ณ๋์ผ๋ก ๊ณ๋์น๊ธฐ (0) | 2022.08.20 |
[๋ฐฑ์ค,c++] 10971๋ฒ - ์ธํ์ ์ํ2 (0) | 2022.08.20 |
[๋ฐฑ์ค,c++] 17266๋ฒ - ์ด๋์ด ๊ตด๋ค๋ฆฌ (0) | 2022.08.18 |
๋๊ธ