본문 바로가기

PS/백준

[BOJ] 백준 7576 토마토 (Swift)

반응형

문제

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

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

풀이

BFS로 풀 수 있는 문제입니다.
먼저 익어있는 토마토의 y,x 좌표를 queue에 넣어주고 시작을 해야합니다.

그 이후, 익어있는 토마토로부터 상하좌우로 0인 토마토가 익게되는데,
0일 때만 queue에 넣어주고, 0인 좌표를 익어있던 토마토 + 1의 값으로 설정해줍시다.

예를들어

[0, 0]
[0, 1]

토마토가 위처럼 주어지고 하루가 지나면,
[0, 2]
[2, 1]

다음날

[3, 2]
[2, 1]

과 같이 변하게 될 것입니다.

가장 큰 수가 3이므로, 3 - 1 인 2일 만에 모든 토마토가 익은 것을 확인할 수 있습니다.

BFS를 수행한 이후에도 0이 남아있다면 토마토가 모두 익지 못하는 상황이므로 -1을 출력해줍니다.
처음부터 모든 토마토가 익어있는 상황이라면, BFS를 해도 그대로 일 것이므로 가장 큰 수 1에서 1을 빼주어 0을 출력하게 됩니다.

저는 flatMap을 사용하여 2차원 배열을 1차원 배열로 만들어주어서 최대 값을 찾았습니다.

소스코드

후기

시작지점이 여러개인 BFS 문제였습니다.
BFS를 자주 접했다면 어렵지않게 풀 수 있는 문제였습니다.

반응형