반응형
문제
https://www.acmicpc.net/problem/7576
풀이
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를 자주 접했다면 어렵지않게 풀 수 있는 문제였습니다.
반응형
'PS > 백준' 카테고리의 다른 글
[BOJ] 백준 16928 뱀과 사다리 게임 (Swift) (0) | 2023.04.27 |
---|---|
[BOJ] 백준 7569 토마토 (Swift) (0) | 2023.04.27 |
[BOJ] 백준 7562 나이트의 이동 (Swift) (0) | 2023.04.27 |
[BOJ] 백준 1697 숨바꼭질 (Swift) (0) | 2023.04.26 |
[BOJ] 백준 2178 미로 탐색 (Swift) (0) | 2023.04.26 |