Skip to content

C++ BOJ7576 (BFS 응용) #26

@Settpark

Description

@Settpark
  • 저번에와 같이 잘못했던 방식으로 cnt를 두고 cnt++; 지속하고 cnt 값을 반환하면 되겠다 했는데,
  • 마찬가지로 단방향이 아닌 경우에 같은 날 익은 토마토가 다른 날 익은 것처럼 처리되기 때문에, 답이 산으로 가버림
  • 결국 마지막에 익은 토마토 (가장 익는데 오래 걸린 토마토를 찾으면 전부 토마토가 익은 것이기 떄문에 거리 구하기랑 똑같다.)
for (int i = 0; i<n; i++) {
    for (int j = 0; j<m; j++) {
        cin >> board[i][j];
        if (board[i][j] == 1)
            Q.push({i,j});
        if (board[i][j] == 0)
            vis[i][j] = -1;
    }
}
  • 그리고 위의 코드와 같이 제일 처음에 초기화 할 때, board[i][j]가 0일 때만 vis[i][j]를 -1로 초기화 해줌으로써,
  • 나중에 탐색할 때 >= 0 조건을 걸어서 익을 수 없는 토마토를 거를 수 있다.

그리고 행렬 자꾸 헷갈리는데 가로길이가 m 세로길이가 n으로 주어지면 행렬을 탐색할 땐 아래와 같이 해야 한다.

for (int i = 0; i<n; i++) {
    for (int j =0; j<m; j++) {
        if (vis[i][j] == -1) {
            cout << -1;
            return;
        }
        ans = max(vis[i][j], ans);
    }
}

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions