문제) 백준 - 구현 - 학부 연구생 민상
https://www.acmicpc.net/problem/21922
21922번: 학부 연구생 민상
첫 번째 줄에는 연구실의 크기가 세로 $N(1 \le N \le 2,000)$, 가로 $M(1 \le M \le 2,000)$ 순으로 주어진다. 두 번째 줄부터 $N + 1$ 줄까지 연구실 내부 구조 정보를 알려주는 값 $M$개가 주어진다. $1,2,3,4$
www.acmicpc.net
놓인 물건 종류의 따라 에어컨 바람이 지날 수 있는 자리의 수를 찾는 문제였습니다. DFS를 통해 놓인 물건에 따라 연구실을 탐색합니다. 방문 여부를 체크할 때, 다른 방향에서 온 바람은 지날 수 있기에 visited배열을 visited[MAX][MAX][4]로 선언합니다. 에어컨이 놓인 네 방향에 대하여 DFS를 진행한 후, 연구실을 방문했던 칸을 모두 계산하여 출력하면 해결할 수 있습니다.
C++ 소스코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool valid(int x, int y){ | |
return 0 <= x && x < N && 0 <= y && y < M; | |
} | |
int turnDir(int bb, int d){ | |
if(bb == 1){ | |
if(d == 1 || d == 3) return -1; | |
else return d; | |
}else if(bb == 2){ | |
if(d == 0 || d == 2) return -1; | |
else return d; | |
}else if(bb == 3){ | |
if(d == 0) | |
return 1; | |
else if(d == 1) | |
return 0; | |
else if(d == 2) | |
return 3; | |
else if(d == 3) | |
return 2; | |
}else if(bb == 4){ | |
if(d == 0) | |
return 3; | |
else if(d == 1) | |
return 2; | |
else if(d == 2) | |
return 1; | |
else if(d == 3) | |
return 0; | |
} | |
return d; | |
} | |
void dfs(int x, int y, int d){ | |
visited[x][y][d] = true; | |
d = turnDir(board[x][y], d); | |
if(d == -1) return; | |
int nx = x + Dir[d].first; | |
int ny = y + Dir[d].second; | |
if(valid(nx, ny) && !visited[nx][ny][d]) | |
dfs(nx, ny, d); | |
return; | |
} |
Full Code)
GitHub - Chocochip101/BOJ_Solution: BOJ Solutions
BOJ Solutions. Contribute to Chocochip101/BOJ_Solution development by creating an account on GitHub.
github.com
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 11687번 - 팩토리얼 0의 개수 (C++) 문제 및 풀이 (0) | 2022.02.22 |
---|---|
[백준] 4096번 - 팰린드로미터 (C++) 문제 및 풀이 (0) | 2022.02.22 |
[백준] 5618번 - 공약수 (C++) 문제 및 풀이 (0) | 2022.02.21 |
[백준] 3584번 - 가장 가까운 공통 조상 (C++) 문제 및 풀이 (0) | 2022.02.19 |
[백준] 6118번 - 숨바꼭질 (C++) 문제 및 풀이 (0) | 2022.02.19 |
댓글