steve7161   1년 전

예제 1, 3번에서 정답보다 하나 적게 출력되는데 이유를 모르겠습니다.

dontsaymyid   1년 전

31번 줄을 보겠습니다.

for (int i = 0; i < Q.size(); i++)

Q.size()번만큼 반복하는 것처럼 보이지만, 여기에는 함정이 있습니다.

반복문을 돌 때마다 Q.size()를 호출하여, 그 값이 i보다 작은지 확인합니다. 그런데 반복문 안에서 Q.pop()과 Q.push()가 호출되므로, Q.size()의 반환값은 실시간으로 변합니다. 뎔국 반복문 진입 전에 확인한 Q.size()가 반복문 끝까지 유지될 거라는 보장이 없고, 실제로 1번, 3번 예제에서 같은 이유로 값이 다르게 나옵니다.

두 가지 해결책이 있습니다.

변수 tmp를 만들어서, 거기에 Q.size()의 반환값을 미리 저장해두고 반복문에 사용합니다.

tmp = Q.size();
for (int i = 0; i < tmp; i++)

두 번째는 arr 배열에 각 토마토가 익은 날짜를 따로 저장하는 방법입니다.

if (arr[n.first][n.second] == 0) {
arr[n.first][n.second] = arr[node.first][node.second] + 1;

와 같이 토마토가 익은 날짜를 arr에 저장하는 방식으로 코드를 수정해보면, 불필요한 반복문과 변수들이 몇 개 사라지면서 코드가 더 깔끔해집니다.

댓글을 작성하려면 로그인해야 합니다.