![[BOJ 7576] 토마토 (C++)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA64m4%2Fbtrjl9RKXtE%2FTFTLYnnz8Y1YKhYk9hnv20%2Fimg.png)
Problem
https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
Comment
해당 문제는 '하루가 지나면 익은 토마토 주위에 있는 토마토들이 익는다'고 하는 문장에서 BFS로 풀어야 한다는 힌트를 얻을 수 있습니다. 따라서 BFS를 이용하여 문제를 풀어보겠습니다.
문제의 핵심은 익은 토마토 주위(상, 하, 좌, 우)에 있는 익지 않은 토마토를 찾아 다음날이 지나면 익게 되는 것입니다. 우리는 모든 토마토가 익은 총 일수가 필요한 것이니 1을 그대로 사용해서 일(Day)로 생각하고 풀어도 될 것입니다. 즉, 배열에 적혀있는 수 N-1(단, N != 0)이 그 토마토가 익는데 걸리는 일(Day)이라고 생각해도 된다는 것입니다.
처음 프로그램이 실행되고 나서 토마토의 입력을 받은 후, 토마토가 익었다면 큐에 추가해줍니다. 추가된 큐는 입력이 끝난 후 하나씩 BFS를 실행하게 됩니다. 모든 원소들의 BFS가 끝난 후, tomato 배열의 원소값들을 하나씩 보면서 (제일 큰 숫자 - 1)이 토마토가 모두 익는데 걸리는 일(Day)입니다.
예제 1을 천천히 따라가면서 어떻게 동작하는지 알아보겠습니다.
1일차에는 하나 있는 익은 토마토 주위에 익은 토마토가 생기게 됩니다 (총 3개).
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 1
2일차에는 세 개의 익은 토마토 주위에 생기게 됩니다 (총 6개).
0 0 0 0 0 0
0 0 0 0 0 1
0 0 0 0 1 1
0 0 0 1 1 1
3일차에는 네 개의 익은 토마토 주위에 생기게 됩니다 (총 10개).
0 0 0 0 0 1
0 0 0 0 1 1
0 0 0 1 1 1
0 0 1 1 1 1
4일차에는 네 개의 익은 토마토 주위에 생기게 됩니다 (총 14개).
0 0 0 0 1 1
0 0 0 1 1 1
0 0 1 1 1 1
0 1 1 1 1 1
5일차에는 네 개의 익은 토마토 주위에 생기게 됩니다 (총 18개).
0 0 0 1 1 1
0 0 1 1 1 1
0 1 1 1 1 1
1 1 1 1 1 1
6일차에는 세 개의 익은 토마토 주위에 생기게 됩니다 (총 21개).
0 0 1 1 1 1
0 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
6일차에는 두 개의 익은 토마토 주위에 생기게 됩니다 (총 23개).
0 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
7일차에는 두 개의 익은 토마토 주위에 생기게 됩니다 (총 23개).
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
Code
Result
'CSE > 알고리즘 (algorithm)' 카테고리의 다른 글
[백준 2164] 카드2 (C++) (0) | 2021.11.16 |
---|---|
[BOJ 2884] 알람 시계 (C++) (0) | 2021.11.14 |
[BOJ 1874] 스택 수열 (C++) (0) | 2021.11.10 |
[BOJ 11725] 트리의 부모 찾기 (C++) (0) | 2021.11.10 |
[BOJ 10773] 제로 (C++) (0) | 2021.11.10 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!