7576번 - 토마토
<main 함수>토마토의 정보를 입력 받을 때,익은 토마토의 좌표를 큐에 담는다. .
<riping 함수>
0. 익은 토마토 좌표 큐의 사이즈를 저장해둔다1. 큐에서 좌표를 하나 꺼낸다.2. 큐의 좌표를 보고 익은 토마토에 인접한 안 익은 토마토들을 찾는다3. 안 익은 토마토들을 익히고 그 좌표를 큐에 담는다4. cnt(횟수)를 1 올린다.
위 과정을 cnt=(1번에서 저장한 큐사이즈) 가 될 때까지 반복하면하루동안 토마토를 익힌 것이 된다
,<ripeDay함수>
riping 함수를 실행할 때마다 day 를 1씩 올린다더이상 익은 토마토가 없을 때까지 riping 함수를 반복한다.day를 리턴한다
토마토가 다 익었는지 판단하기 위해, 토마토 상자의 값을 모두 곱한 것을 mul 이라고 하고,mul이 0인지 확인했다(모두 곱했는데 0이 나왔다는 것은 하나라도 안 익은 것(0)이 있다는 의미이므로)
---
위와 같은 과정으로 했는데, 다 익히는 것이 불가능한 경우를 어떻게 해야할 지 모르겠습니다
가령 아래와 같은 경우에 (0,0) 토마토에 인접한 익은 토마토가 없기 때문에,
3 30 -1 0-1 1 01 0 1
(0,0) 토마토는 익을 수가 없고그러면 계속 안 익은 토마토가 있으니까ripeDay 함수 종료 조건에 따르면mul이 계속 0이어서 무한 루프에 빠져야 될텐데그렇지 않고 아래와 같은 결과가 나옵니다
<입력>3 30 -1 0-1 1 01 0 1
<출력> 토마토가 익는 과정을 보기 위해 출력을 해봤습니다
0 -1 0-1 1 11 1 1
0 -1 1-1 1 11 1 1
<여기를 보시면 영향을 줄만한 토마토가 없는데 (0,0) 토마토가 혼자 익어버렸습니다>
1 -1 1-1 1 11 1 1
DAY IS 4
코드를 설명하다보니까 질문이 많이 길어졌네요 ㅠㅠ어떻게 해야할 지 알려주신다면 정말 감사하겠습니다
상자의 범위를 벗어날 수 있는지 범위 체크를 하세요. 지금 코드는 -1이나 n, 심지어는 -10000까지 나가도 운 나쁘게 해당 메모리 위치에 우연히 0이 들어있기만 하다면 그대로 진행합니다.
말씀해주신대로 범위를 체크해서못 익는 토마토가 익어버리는 문제는 해결했는데그랬더니 예상대로 무한루프가 됐습니다 ㅠ
아무래도 종료 조건을 바꾸는 게 좋을 것 같은데토마토들의 곱이 0인지 확인하는 것 말고다른 종료 조건이 뭐가 있을까요..
어찌됐건 답변 감사합니다!!
큐가 비어있을 때 종료하면 됩니다.
덕분에 풀었습니다 정말 감사드려요!!!!
댓글을 작성하려면 로그인해야 합니다.
174291 5년 전
<main 함수>
토마토의 정보를 입력 받을 때,
익은 토마토의 좌표를 큐에 담는다. .
<riping 함수>
0. 익은 토마토 좌표 큐의 사이즈를 저장해둔다
1. 큐에서 좌표를 하나 꺼낸다.
2. 큐의 좌표를 보고 익은 토마토에 인접한 안 익은 토마토들을 찾는다
3. 안 익은 토마토들을 익히고 그 좌표를 큐에 담는다
4. cnt(횟수)를 1 올린다.
위 과정을 cnt=(1번에서 저장한 큐사이즈) 가 될 때까지 반복하면
하루동안 토마토를 익힌 것이 된다
,
<ripeDay함수>
riping 함수를 실행할 때마다 day 를 1씩 올린다
더이상 익은 토마토가 없을 때까지 riping 함수를 반복한다.
day를 리턴한다
토마토가 다 익었는지 판단하기 위해,
토마토 상자의 값을 모두 곱한 것을 mul 이라고 하고,
mul이 0인지 확인했다
(모두 곱했는데 0이 나왔다는 것은 하나라도 안 익은 것(0)이 있다는 의미이므로)
---
위와 같은 과정으로 했는데, 다 익히는 것이 불가능한 경우를 어떻게 해야할 지 모르겠습니다
가령 아래와 같은 경우에 (0,0) 토마토에 인접한 익은 토마토가 없기 때문에,
3 3
0 -1 0
-1 1 0
1 0 1
(0,0) 토마토는 익을 수가 없고
그러면 계속 안 익은 토마토가 있으니까
ripeDay 함수 종료 조건에 따르면
mul이 계속 0이어서 무한 루프에 빠져야 될텐데
그렇지 않고 아래와 같은 결과가 나옵니다
<입력>
3 3
0 -1 0
-1 1 0
1 0 1
<출력> 토마토가 익는 과정을 보기 위해 출력을 해봤습니다
0 -1 0
-1 1 1
1 1 1
0 -1 1
-1 1 1
1 1 1
0 -1 1
-1 1 1
1 1 1
<여기를 보시면 영향을 줄만한 토마토가 없는데 (0,0) 토마토가 혼자 익어버렸습니다>
1 -1 1
-1 1 1
1 1 1
1 -1 1
-1 1 1
1 1 1
DAY IS 4
코드를 설명하다보니까 질문이 많이 길어졌네요 ㅠㅠ
어떻게 해야할 지 알려주신다면 정말 감사하겠습니다