[Softeer] [HSAT 7ํ ์ ๊ธฐ ์ฝ๋ฉ ์ธ์ฆํ๊ฐ ๊ธฐ์ถ] ์์๋๋ก ๋ฐฉ๋ฌธํ๊ธฐ (C++)
ํ์ฌ ๋ฐฉ๋ฌธํ ์์น๊ฐ node[i].first, node[i].second๋ผ๋ฉด index+1 ํ๊ณ ํด๋น ๋ ธ๋ ๋ฐฉ๋ฌธ, ์๋๋ฉด index ์ ์งํ๊ณ ํด๋น ๋ ธ๋ ๋ฐฉ๋ฌธ, ์์๋๋ก ๋ฐฉ๋ฌธํ๋์ง ์ฌ๋ถ๋ ์ด๊ฒ์ผ๋ก ์ฒดํฌํ ์ ์์
(2,0) → (2,1) → (1,1) → (0,1) → (0,2) → (1,2)
(2,0) → (2,1) → (1,1) → (0,1) → (0,0) → (0,1) → (0,2) → (1,2)
(2,0) → (1,0) → (1,1) → (0,1) → (0,2) → (1,2)
(2,0) → (1,0) → (0,0) → (0,1) → (0,2) → (1,2)
(2,0) → (1,0) → (0,0) → (0,1) → (1,1) → (1,2)
๊ณ์ index ๋๋ index+1๋ก ์ฌ๊ท ํธ์ถ์ ํ๋ฏ๋ก, ๊ณ์ ์ฌ๊ทํธ์ถํ๋ค๊ฐ ๋ง์ง๋ง ์์๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด result++ํ๊ณ ๋ฆฌํด.
ํจ์๊ฐ ๋ฆฌํด์ ํ๊ฒ ๋๋ฉด ๋ง์ง๋ง ์คํ ์์น์์ ๋ค์์ ์คํํ๊ฒ ๋ ๊ฒ.
๋ฐ๋ผ์ ๋ฐฉ๋ฌธ์ ๋ค์ ์ด๊ธฐํํด์ ๋ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋๋ก ํจ.
if(cx == node[index].first && cy == node[index].second){
search(cx, cy, index+1);
} else{
search(cx, cy, index);
}
์ด๋ ๊ฒ if๋ฌธ์ผ๋ก ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ ๋์๋๋ฐ, ์ผํญ์ฐ์ฐ์ ์ผ์ ๋ +1 ๊ฐ์ด ๊ตฌํด์ก์. ๊ทธ๋์ ๊ทธ๋ฅ if๋ฌธ ์ฌ์ฉํจ.
#include<iostream>
#include<vector>
using namespace std;
int nx[] = {0,0,1,-1};
int ny[] = {1,-1,0,0};
int n,m,result=0;
vector<pair<int,int>> node; // ๋ฐฉ๋ฌธํด์ผ ํ๋ ์์น(x,y) m๊ฐ
int graph[4][4]={0,};
int check[4][4]={0,};
int search(int x, int y, int index){
// ๋ชจ๋ ๋ฐฉ๋ฌธํด์ผ ํ๋ m๊ฐ ์ง์ ์์๋๋ก ๋ฐฉ๋ฌธํ์ผ๋ฉด ๋ฆฌํด
if(index == m){
result++;
//cout << endl;
return 0;
}
for(int i=0; i<4; i++){
int cx = x + nx[i];
int cy = y + ny[i];
// ์ ํจํ์ง ์๋ ์์น๋ฉด ํจ์ค
if(cx < 0 || cy < 0 || cx >= n || cy >= n) continue;
// ๋ฐฉ๋ฌธํ์ง ์๊ณ , ๋ฒฝ(1)์ด ์๋๋ฉด (cx,cy) ๋ฐฉ๋ฌธ
if(check[cx][cy] == 0 && graph[cx][cy] == 0){
check[cx][cy] = 1;
//cout << "visit (" << cx << "," << cy << ") \n";
if(cx == node[index].first && cy == node[index].second){
search(cx, cy, index+1);
} else{
search(cx, cy, index);
}
check[cx][cy] = 0;
}
}
}
int main(int argc, char** argv)
{
cin >> n >> m;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> graph[i][j];
}
}
for(int i=0; i<m; i++){
int x,y;
cin >> x >> y;
node.push_back(make_pair(x-1,y-1));
}
// ์ง๋์ผ ํ๋ ๋
ธ๋๋ถํฐ ์์ํ๋ฏ๋ก, index๋ 0์ด ์๋ 1๋ก ์ค
check[node[0].first][node[0].second] = 1;
//cout << "visit (" << node[0].first << "," << node[0].second << ") \n";
search(node[0].first, node[0].second, 1);
cout << result << endl;
return 0;
}
[BOJ] 14501: ํด์ฌ (C++) (0) | 2024.03.24 |
---|---|
[BOJ] 7576: ํ ๋งํ (C++) (1) | 2024.03.05 |
[BOJ] 2875 (C++) (1) | 2024.02.25 |
[Softeer] ์๋์ฐจ ํ ์คํธ (C++) (0) | 2024.02.16 |
[Softeer] ์ฑ์ ํ๊ท (C++) (0) | 2024.02.15 |