Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- The Loard of BOF
- 드림핵
- hackerrank
- 머신러닝
- WarGame
- 자료구조 복습
- HTML
- BOJ
- Sookmyung Information Security Study
- XSS Game
- siss
- Python
- SWEA
- c
- 숙명여자대학교 정보보안동아리
- C언어
- BOJ Python
- 풀이
- PHP 웹페이지 만들기
- 백준
- Javascript
- CSS
- c++
- 생활코딩
- 파이썬
- hackctf
- 기계학습
- 숙명여자대학교 정보보안 동아리
- lob
- 웹페이지 만들기
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 7576번: 토마토 본문
CODE
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int board[1002][1002];
int dist[1002][1002];
int n, m, day;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> m >> n;
queue<pair<int, int>> q;
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) dist[i][j] = -1;
}
}
while(!q.empty()){
pair<int, int> cur = q.front(); q.pop();
for(int dir=0; dir<4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if(dist[nx][ny] >= 0) continue;
dist[nx][ny] = dist[cur.X][cur.Y] + 1;
q.push(make_pair(nx, ny));
}
}
day = 0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(dist[i][j] == -1){
cout << -1;
return 0;
}
day = max(day, dist[i][j]);
}
}
cout << day;
return 0;
}
풀이
- m과 n을 입력받는다. (m이 가로 칸으 수인 것을 주의!)
- 시작점이 여러개이므로 모든 시작점을 큐에 넣고 bfs 탐색을 시작해야 한다.
- 토마토가 익는데 걸리는 시간은 토마토사이의 거리와 동일하다는 것을 생각하고 문제를 해결해야 한다.
- 이미 익거나 토마토가 들어있지 않은 칸은 0으로 익지 않은 토마토는 -1로 초기화
- 탐색을 하며 거리를 갱신해주고 답을 출력하기 전에 익지 않은 토마토(-1)가 있는지 확인하고 있다면 -1을 없다면 가장 큰 값을 출력한다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 5427번: 불 (0) | 2022.10.10 |
---|---|
[BOJ_C++] 7569번: 토마토 (0) | 2022.10.06 |
[BOJ_C++] 10026번: 적록색약 (0) | 2022.10.05 |
[BOJ_C++] 3986번: 좋은 단어 (0) | 2022.09.30 |
[BOJ_C++] 10799번: 쇠막대기 (0) | 2022.09.30 |