티스토리 뷰
반응형
백준 1012번 유기농 배추
https://www.acmicpc.net/problem/1012
정답 코드
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int arr[51][51];
int vis[51][51];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
int bfs(int a,int b, int c) {
for (int x = 0; x < a; x++) {
for (int y = 0; y < b; y++) {
arr[x][y] = 0;
vis[x][y] = 0;
}
}
for (int x = 0; x < c; x++) {
int dx, dy;
cin >> dx >> dy;
arr[dx][dy] = 1;
}
int num = 0;
queue<pair<int, int>>q;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
if (arr[i][j] == 0 || vis[i][j])
continue;
q.push({ i,j });
num++;
vis[i][j] = 1;
while (!q.empty()) {
pair<int, int>cur = q.front();
q.pop();
for (int x = 0; x < 4; x++) {
int mx = cur.first + dx[x];
int my = cur.second + dy[x];
if (mx < 0 || my < 0 || mx >= a || my >= b)
continue;
if (arr[mx][my] == 0 || vis[mx][my])
continue;
vis[mx][my] = 1;
q.push({ mx,my });
}
}
}
}
return num;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for (int x = 0; x < n; x++) {
int a, b, c;
cin >> a >> b >> c;
cout << bfs(a, b, c) << endl;
}
}
문제 해설
bfs를 구현하는 문제이다. 사실 bfs는 거의 정석적인 코드 구현방식이 있기 때문에 정석만 알면 어렵지 않은 문제입니다. 중요한 것은 방문했던 곳을 다시 가지 않기 위한 배열을 만들어주는 것입니다. 이미 방문한 곳이라면 continue를 이용하여 queue가 빌 때까지 계속해서 반복문을 돌려서 이동시키는 것입니다. 시작점이 한 개가 아니기 때문에 for문을 통해서 시작점을 찾아주었고dx, dy배열을 이용하여 배열안에서 이동할 수 있도록 해주었습니다. bfs구현이 궁금하다면 바킹독이라는 유튜버의 강의를 듣는 것을 추천합니다.
반응형
'Algorithm > BOJ' 카테고리의 다른 글
백준 1065번 C++ (0) | 2023.07.21 |
---|---|
백준 1037번 C++ (0) | 2023.07.20 |
백준 1010번 C++ (0) | 2023.07.20 |
백준 1009번 C++ (0) | 2023.07.20 |
백준 1008번 C++ (0) | 2023.07.20 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- DP
- BFS
- HTML5
- 반복문
- 투 포인터
- html
- CSS
- DFS
- 유클리드 호제법
- 이분 매칭
- 알고리즘
- 스프링 부트 crud 게시판 구현
- 백준 풀이
- 유니온 파인드
- c++ string
- 세그먼트 트리
- 우선순위 큐
- js
- 카운팅 정렬
- C++
- Do it!
- 에라토스테네스의 체
- 자바
- 자료구조
- 알고리즘 공부
- 스택
- 백준
- 자바스크립트
- C++ Stack
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함