🧑‍💻/Algorithm

알고리즘) 백준 7569번 토마토 Swift

유리맥 2021. 5. 13. 19:02
반응형

https://www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net


예제

입력 출력
5 3 1
0 -1 0 0 0
-1 -1 0 1 1
0 0 0 1 1
-1
5 3 2
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
4
4 3 2
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
-1 -1 -1 -1
1 1 1 -1
0

 


문제 접근

이 문제는 3차원 배열이기 때문에 2차원 배열의 토마토 문제를 먼저 풀어 보는 것을 추천합니다.

먼저 토마토의 상태를 누적 방문 횟수라고 생각하며 접근했습니다. 방문하면(익으면) 누적 방문 횟수(익은 날짜)를 넣어 보았습니다.

  • 1 = 익음 = 방문함
  • 0 = 안익음 = 방문 안함
  • -1  = 없음 = 방문할 수 없음

토마토가 인접한 곳을 두번째 예제를 이용해 도식화해보았습니다.
(박스 번호, 세로, 가로) 순서로 토마토가 익은 1의 위치를 3차원 배열로 표현하면 (1, 1, 2) 입니다.
위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향이 인접해 있으므로
기준점으로부터 (1, 0, 0), (-1, 0, 0), (0, 0, -1), (0, 0, 1), (0, -1, 0), (0, 1, 0) 만큼 떨어져 있습니다.


처음에 토마토가 익은 곳의 위치를 큐에 넣고 방문한 적 없는 인접한 토마토의 위치를 차례로 큐에 넣습니다.
큐에 있는 모든 토마토의 위치를 방문한 뒤 결과를 출력합니다.

  • 안익은 토마토가 있으면 = 0인 값이 남아있으면 -1을 출력
  • 처음부터 모두 익어있었으면 = 누적 방문 횟수 값이 1이면 = 0을 출력
  • 익는데 며칠 지났다면 최대 누적 방문 횟수 값에서 초기화 값인 1을 빼고 출력

풀이

 

풀이 속 출력 테스트 주석을 해제하여 실행해보면 이해가 빠르게 됩니다. 😊

 

반응형