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 |
Tags
- 다익스트라
- Team Fortress 2
- 시뮬레이션
- 우선순위 큐
- 누적 합
- VR
- Unreal Engine 5
- 백준
- 유니온 파인드
- 문자열
- 브루트포스
- 트리
- 그리디 알고리즘
- 구현
- 투 포인터
- BFS
- 알고리즘
- ue5
- 스택
- 다이나믹 프로그래밍
- 그래프
- 재귀
- XR Interaction Toolkit
- 수학
- 백트래킹
- 유니티
- c++
- DFS
- 자료구조
- 정렬
Archives
- Today
- Total
1일1알
백준 2636번 치즈 C++ 본문
주어진 입력의 가장자리에는 치즈가 없기 때문에 (0, 0)에는 치즈가 절대 없을 것이다.
치즈가 전부 녹을 때까지 (0, 0)에서 bfs를 시작하여 치즈를 녹이는 것을 반복하였다.
bfs 도중에 치즈를 만나면 continue를 해서 바깥에 있는 치즈만 녹도록 하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef long long ll;
int r, c;
int cheese_size = 0;
int last_size = 0;
int cnt = 0;
int dRow[4] = { -1,0,1,0 };
int dCol[4] = { 0,1,0,-1 };
void bfs(vector<vector<bool>>& board) {
vector<vector<bool>> found(r, vector<bool>(c, false));
queue<pair<int, int>> q;
q.push({ 0,0 });
found[0][0] = true;
while (!q.empty()) {
auto curr = q.front();
q.pop();
if (board[curr.first][curr.second]) {
cheese_size--;
board[curr.first][curr.second] = false;
continue;
}
for (int i = 0; i < 4; i++) {
int nextRow = curr.first + dRow[i];
int nextCol = curr.second + dCol[i];
if (nextRow < 0 || nextRow >= r) continue;
if (nextCol < 0 || nextCol >= c) continue;
if (found[nextRow][nextCol]) continue;
q.push({ nextRow,nextCol });
found[nextRow][nextCol] = true;
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> r >> c;
vector<vector<bool>> board(r, vector<bool>(c));
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
int input;
cin >> input;
board[i][j] = input;
if (board[i][j]) cheese_size++;
}
}
last_size = cheese_size;
while (cheese_size > 0) {
last_size = cheese_size;
bfs(board);
cnt++;
}
cout << cnt << "\n" << last_size;
};
'알고리즘' 카테고리의 다른 글
백준 2891번 카약과 강풍 C++ (0) | 2022.01.23 |
---|---|
백준 5747 Odd or Even C++ (0) | 2022.01.23 |
백준 3019번 테트리스 C++ (0) | 2022.01.21 |
백준 16925번 문자열 추측 C++ (0) | 2022.01.20 |
백준 16958번 텔레포트 C++ (0) | 2022.01.19 |