728x90
https://softeer.ai/practice/6246/history?questionType=ALGORITHM
ํ๋ ์ํํฐ์ด Lv3. ์์๋๋ก ๋ฐฉ๋ฌธํ๊ธฐ C++ ํ์ด
๋ฌธ์ ๋์ด๋๋ ์ ์ ํด๋ณด์ด๋, ์กฐ๊ฑด ์ค๋ช ์ด ์ฝ๊ฐ ์์ฌ์ ๋ ๋ฌธ์ .
์ต๋จ๊ฑฐ๋ฆฌ๋ ์๋๊ณ ๋ฐฉ๋ฌธํ๋ ์นธ์ ๋ค์ ์ง๋์ง๋ง ์์ผ๋ฉด ๋๋๋ฏ
์ ์ฒด dfs ๊ฒฝ์ฐ ์ค, ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋ ์ง์ ์ ๊ฑฐ์น๋ ๊ฒฝ์ฐ๋ง์ countํด์ ํด๊ฒฐํ๋ค.
#include<iostream>
#include <vector>
#include <queue>
using namespace std;
int grid[4][4]={0,};
int visited[4][4]={0,};
int n; int m;
vector<pair<int,int>> store;
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int count=0;
bool canVisit(int x, int y){
if(x<0 || x>=n || y<0 || y>=n) return false;
if(grid[x][y] == 1) return false;
if(visited[x][y]) return false;
return true;
}
void dfs(int x, int y, int cnt){ // ์์ ์์น, ๋ฐฉ๋ฌธ์ง์ ์
if(store[cnt]==make_pair(x,y)) {
cnt++;
if(cnt>=m){
count ++;
return;
}
}
visited[x][y] = 1; // ์ด๊ฑฐ ๊น๋จน์๋ค..์ฃผ์!!!
for(int i=0; i<4; ++i){
int nx = x + dx[i];
int ny = y + dy[i];
if(canVisit(nx, ny)){
dfs(nx,ny,cnt);
}
}
visited[x][y] = 0;
return;
}
void findRoute(){
pair<int,int> p = store[0];
dfs(p.first, p.second, 1);
}
int main(int argc, char** argv)
{
int tmp; int tmp2;
int answer;
cin >> n >> m;
for(int i=0; i<n; ++i){
for(int j=0; j<n; ++j) {
cin >> grid[i][j];
}
}
for(int i=0; i<m; ++i){
cin >> tmp >> tmp2;
store.push_back({tmp-1 , tmp2-1});
}
findRoute();
cout << count;
return 0;
}
728x90
'๐ ์๊ณ ๋ฆฌ์ฆ > Softeer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript(NodeJS)/Softeer] Lv1. A+B (0) | 2024.06.27 |
---|---|
[Javascript(NodeJS)/Softeer] Lv1. ๊ทผ๋ฌด ์๊ฐ (0) | 2024.06.27 |
[C++/Softeer] Lv2. ํ์์ค ์์ฝ (0) | 2024.06.27 |
[C++/Softeer] Lv1. ์ํํ ํจ๋ (0) | 2024.06.26 |
[C++/Softeer] Lv3. ํจ๊ปํ๋ ํจ๋ (0) | 2024.06.26 |