본문 바로가기

BFS

(6)
C++) 백준 7562번 - 나이트의 이동 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net #include using namespace std; int dx[]={-2,-1,1,2,2,1,-1,-2}; int dy[]={1,2,2,1,-1,-2,-2,-1}; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int tc; cin>>tc; while(tc--){ int board[302][302]={}..
C++) 백준 7569번 - 토마토 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net #include using namespace std; int board[103][103][103]; int dist[103][103][103]; int mx[]={1,0,-1,0,0,0}; int my[]={0,1,0,-1,0,0}; int mh[]={0,0,0,0,1,-1}; queue q; int main() { ios_base::sync_with_stdio(false)..
C++) 백준 10026번 - 적록색약 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net BFS문제이다. 문자열을 받는다는 점에서 조금 까다로운 면이 있었다. R,G,B,RG각각 BFS를 수행하는 함수를 만들었다. R,G,B 함수를 먼저 실행해 R,G값을 1로 변경한 후 RG함수를 실행한다. #include using namespace std; string s[102]; void R(int a, int b, int c, int d){ //a,b는 입력된 행과 열, c,d는 행과..
C++) 백준 1012번 - 유기농 배추 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 상당히 복잡하게 구현한 감이 있다. 큐를 두개 사용해 q1에 배추의 위치를 모두 push하고 이후 q2에 q1의 front를 push해 bfs하는 방식으로 구현했다. 이미 방문한 경우 q2에 push하지 않고 push된 횟수 만큼의 덩어리가 board에 생기는 것을 이용해 답을 산출했다. #include using namespace std; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0..
C++) 백준 4179번 - 불! https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net BFS 알고리즘을 이용해야 하는 문제이다. 스트링을 2차원으로 선언해 입력을 받아왔다. 불의 확산 시간과 지훈이의 이동 시간을 표시할 두 배열을 선언했고 BFS를 위한 큐는 하나를 선언해 재활용 했다. #include using namespace std; string board[1002]; //미로의 입력 받아올 board int fire[1002][1002]; //불의 이동 시간 ..
C++) 백준 1697번 - 숨바꼭질 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net BFS 알고리즘을 이용한 문제이다. 소요되는 시간을 표시할 board를 배열로 생성했고 0으로 초기화 했다. 이후 while루프 내 예외처리 과정에서 board의 값이 0보다 큰 경우는 이미 방문한 것으로 간주해 건너뛰도록 했다. 초기의 위치는 루프 이전에 큐에 푸쉬하기 때문에 생각할 필요가 없다. k에 위치할 경우 루프를 탈출하도록 알고리즘을 짰기 때문에 while(t..