목록백준 (183)
Study hard
https://www.acmicpc.net/problem/3055 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제�� www.acmicpc.net [풀이] bfs사용 물을 인접한 칸에 먼저 이동시킨 후에 고슴도치를 움직인다. #include #include #include using namespace std; struct State { int x, y; int cnt;//이동 시간 }; struct Water { int x, y; }; int R, C; char Forest[50][50]; bool visited[50][50]; const int d..
https://www.acmicpc.net/problem/16954 16954번: 움직이는 미로 탈출 욱제는 학교 숙제로 크기가 8×8인 체스판에서 탈출하는 게임을 만들었다. 체스판의 모든 칸은 빈 칸 또는 벽 중 하나이다. 욱제의 캐릭터는 가장 왼쪽 아랫 칸에 있고, 이 캐릭터는 가장 오른쪽 www.acmicpc.net [풀이] bfs를 사용하였다. check배열을 3차원으로 선언하고 초 단위로 해당 좌표에 방문한 적 있는지 표시 (check[n][x][y] == n초에 (x,y)좌표에 방문한 적 있는지) 욱제의 캐릭터가 (0,7)에 도달할 수 있는 조건 1. 맨 윗칸 어디든 도착할 수 있으면 (0,7)에도 도착할 수 있다. 더 이상 위에서 내려올 벽이 없기 때문! 2. 8초가 지난 후엔 남아 있는 벽..
https://www.acmicpc.net/problem/16933 16933번: 벽 부수고 이동하기 3 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net [풀이] 1.최단 거리를 구하는 문제이므로 bfs사용 2.queue에 x좌표, y좌표, 벽을 부순 횟수(b_cnt), 이동거리(p_len), 낮밤여부(day) 저장 3.visited를 3차원 배열로 선언 (visited[x][y][b] == 좌표(x,y)에 b번 벽을 부수고 방문한 적 있는지) 4.한 번 이동할 때마다 queue에 -day저장하여 낮과 밤 바뀌게..
https://www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net [풀이] 1.최단 거리 구하는 문제이므로 bfs 사용 2.queue에 x좌표, y좌표, 벽을 부순 횟수, 이동거리 저장 3.벽을 만나면 무시하는 게 아니라 K번 이하로 벽을 부술 수 있으므로 visited를 3차원 행렬로 선언 4.벽을 n번 부수고 (x,y)좌표에 방문했으면 visited[x][y][n] = true 5.(N-1, M-1)에 도착하면 이동거리 반..
https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로�� www.acmicpc.net [풀이] 기존의 최단 경로를 구하는 bfs를 쓰지만, visited를 3차원 배열로 선언하여 그 좌표를 벽을 1번 부수고 방문했는지와 부수지 않고 방문했는지 여부를 표시해줬다. #include #include #include //scanf using namespace std; struct State { int x, y; int b_cnt, p_len;//벽을 부순 횟수..
https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크� www.acmicpc.net [풀이] 벽 3개를 새로 새우는 모든 경우의 수에 대해 바이러스가 확산되고 나서의 안전영역을 구하는 문제였다. 먼저 dfs로 이차원 배열의 조합을 구하면서 각 케이스마다 bfs를 이용하여 바이러스가 확산됐을 때의 빈칸의 개수를 구하면 된다. #include #include #include using namespace std; struct Pos { int x, y; }; int N, M; int Map[8]..