문제
[ 문제 조건 ]
- 입력
- 1 = 익은 토마토
- 0 = 익지않은 토마토
- -1 = 토마토 없음
- 출력
- 0 = 저장될 때 모든 토마토 익음
- 1 = 모든 토마토 익지 못함
- n = 모두 익을 때 까지 최소 며칠이 걸리는지
- 보관 후 하루가 지나면 익은 토마토와 인접한 건 익음
[ 해결순서 ]
- 여태까지 풀던 문제는 상하좌우만 비교해서 해결하면 됐으나, 위 아래도 비교해서 6가지 경우를 비교해야한다.
- 3차원 배열로 가로,세로,높이의 값을 입력받고 너비우선탐색의 대상은 익은 값만 이므로 입력받을 때, 토마토가 익은 것들만 큐에 넣는다.
- 큐에 넣은 것들을 하나씩 꺼내며 너비우선탐색 한다.
- 기존 유사한 BFS 문제의 조건 비교에서 (가로, 세로 비교했던 것) 추가로 높이만 비교하고
- 토마토가 익었으면 (값이 0) 그 값을 큐에 넣어주고 기존 값 +1 값을 너비우선탐색한 배열에 넣는다.
- 이제 박스의 모든 값들을 꺼내면서 출력 조건에 맞게 출력한다. (자세한 건 주석확인)
✏️한줄평
문제 자체의 해결은 조금만 생각하면 이해가 됐는데, 처음 입력받을 때 M,N으로 변수 설정을 해놓고 뒤에 가서 코드를 작성하다보니 어떤 것이 X이고 Y인지 헷갈려 반대로 넣는 바람에 자꾸 인덱스 범위 벗어났다는 에러가 떴다. 이거 때문에 한시간 잡아먹은,,, 휴우,, 그래도 얻은게 많은 문제였다. 너비우선탐색 문제를 좀 더 자세히 알아간 기분이다.
코드
'알고리즘' 카테고리의 다른 글
[JAVA] 백준 1245 - 농장 관리 (0) | 2021.07.26 |
---|---|
[JAVA] 백준 11057 - 오르막 수 (0) | 2021.07.25 |
[JAVA] 백준 1991번 - 트리순회 (0) | 2021.07.19 |
[JAVA] 백준 2667번 - 단지번호붙이기 (0) | 2021.07.19 |
[JAVA] 백준 1697번 - 숨바꼭질 (0) | 2021.07.19 |