본문 바로가기

백준128

[백준 4179/c++] 불! 이전의 BFS 문제와는 다르게 입력이 숫자가 아닌 문자열이고 불의 전파된 곳으로는 가지 못하는데 불도 지훈이와 같은 속도로 전파될 경우, 범위 밖으로 탈출해야 한다는 조건이 붙은 문제이다 문자열이므로 보드를 문자열을 담을 1차원 배열로 만들고, 각 좌표에서의 불의 거리를 우선 체크하고, 각 좌표에서의 지훈이의 거리가 더 작아야만 이동가능하도록 조건을 설정, 이동 중 가장 빠르게 범위 밖으로 나갈 수 있을때의 거리를 구하면 되는 문제이다 https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 .. 2022. 8. 11.
[백준 7569/c++] 토마토 이전 7576 번 토마토 문제에서 3차원 배열이란 점만 달라진 문제 3차원 배열과 tuple 을 사용해서 z축을 구현하였다 풀이 자체는 이전 토마토와 같은 BFS 방식이다 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 n, m, h; int board[104][104][104]; int dist[104][104][104]; int dz[6] = {0, 0, 0.. 2022. 8. 10.
[백준 7576/c++] 토마토 이전 미로 문제와 달리 BFS 의 시작지점이 한군데가 아니라 아닐 경우를 생각해보는 문제이다 0,0 을 큐에 처음 넣었던과 달리, 좌표를 돌며 시작 지점이 될 수 있는 모든 곳을 그냥 그대로 큐에 넣으면 된다 이전처럼 visited 대신 좌표의 거리 값 배열 dist를 만들고 dist의 좌표 값 자체로 방문 여부를 파악하게하고 갱신하여 최단거리를 구하면 다익기까지의 최소 시간을 구할 수 있는 문제였다 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www... 2022. 8. 9.
[백준 2178/c++] 미로 탐색 BFS 를 이용한 문제 거리를 문제에서 물었으므로, 각 좌표까지의 거리를 담을 2차원 배열 dist를 만들고 fill 로 -1을 채워넣는다 이전의 그림 문제처럼 상하좌우를 flood fill 방식으로 채워 나가되, visited 의 방문 여부 대신에 dist의 해당 좌표 값이 0보다 작거나 (방문전이라 거리 값을 넣기전이니 기본 값 -1을 가짐) board 좌표 값이 1이 아닌지 (1이어야만 지날 수 있으므로)를 판단하여 새로 이동할 dist의 좌표 값에 +1 을 해준다 그리고 이동할 새 좌표값을 큐에 넣어주어 큐가 빌때까지(더 갈 곳이 없을때까지) 수행 후 dist 의 목표 좌표값 (n, m) 을 출력하면 된다. 단, 1,1 에서 시작한다고 하였으니 1,1 위치를 왼,위로 하나씩 움직여 탐색 시작인 0.. 2022. 8. 8.