티스토리 뷰
반응형
배추밭에 필요한 배추흰지렁이의 최소 갯수를 구하는 문제
문제의 조건
1. 배추를 해충으로부터 보호하기 위해 배추밭에 배추흰지렁이를 놓을 것이다.
2. 지렁이는 상하좌우에 인접한 배추에게 이동할 수 있다.
3. 배추는 한 번에 많이 몰려있지 않고 밭 전체에 퍼져서 심어져 있다.
아파트 단지처럼 배추도 단지별로 심어져 있음
4. 필요한 지렁이의 최소 갯수 구해서 출력하기
5. 테스트 케이스가 여러 개 주어질 수 있다.
풀이 과정
1. BFS로 배추밭을 탐색하는데 전체 밭을 탐색해야 하기 때문에 2중 for문으로 [0, 0]번째부터 탐색한다.
2. 배추 한 칸을 대상으로 상하좌우에 또 배추가 있는지 검사해서 연결된 배추가 있으면 다음에 방문할 큐에 추가
3. 하나의 배추 단지 검사가 끝나고 나면 정답 카운트를 증가시킨다.
4. 하나의 테스트 케이스가 끝나면 정답 카운트를 출력한다.
5. 다음 테스트 케이스 입력을 받아서 반복한다.
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main(int argc, const char * argv[])
{
//상하좌우에 인접한 배추들을 탐색할 방향값 저장
vector<pair<int, int>> dir{
make_pair(1, 0),
make_pair(-1, 0),
make_pair(0, 1),
make_pair(0, -1)
};
int T;
cin >> T;
for (int i = 0; T > i; i++)
{
int M, N, K;
cin >> M >> N >> K;
//배추밭 2차원 배열
vector<vector<bool>> flat(N, vector<bool>(M, false));
for (int j = 0; K > j; j++)
{
int a, b;
cin >> a >> b;
flat[b][a] = true;
}
//방문 표시용 2차원 배열
vector<vector<bool>> visited(N, vector<bool>(M, false));
int answer = 0;
for (int j = 0; N > j; j++)
{
for (int k = 0; M > k; k++)
{
//0,0 부터 탐색하다가 배추를 만나면 입장 후 bfs 시작
if (!visited[j][k] && flat[j][k])
{
queue<pair<int, int>> q;
q.emplace(make_pair(j, k));
while (!q.empty())
{
auto curTile = q.front();
q.pop();
visited[curTile.first][curTile.second] = true;
for (int j = 0; dir.size() > j; j++)
{
auto next = make_pair(curTile.first + dir[j].first, curTile.second + dir[j].second);
if (0 > next.first || N <= next.first || 0 > next.second || M <= next.second) continue;
if (!visited[next.first][next.second] && flat[next.first][next.second])
{
q.emplace(next);
visited[next.first][next.second] = true;
}
}
}
//여기로 오면 하나의 배추 단지 탐색이 끝난 것이다.
//정답 카운트 증가
answer++;
}
}
}
//여기로 오면 하나의 테스트 케이스가 끝난 것이다.
//정답 카운트 출력
cout << answer << endl;
}
return 0;
}
반응형
'알고리즘 문제 풀이 > DFS BFS' 카테고리의 다른 글
[C++] 백준 온라인 저지 4963번 섬의 개수 풀이 (0) | 2021.10.27 |
---|---|
[C++] 백준 온라인 저지 11724번 연결 요소의 개수 풀이 (0) | 2021.10.26 |
[C++] 백준 온라인 저지 2606번 바이러스 풀이 (0) | 2021.10.23 |
[C++] 백준 온라인 저지 2667번 단지번호붙이기 풀이 (0) | 2021.10.23 |
[C++] 백준 온라인 저지 2178번 미로 탐색 풀이 (0) | 2021.10.22 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩공부
- 컴퓨터
- 프로그래머스
- hackerrank
- 캐나다생활
- 스위프트플레이그라운드
- c언어
- 문제풀이
- 해커랭크
- 그리디
- BFS
- DFS
- 아이패드
- 컴퓨터공부
- C언어기초
- 깊이우선탐색
- 백준
- 기초
- c++
- 애플
- 하드웨어
- dp
- 다이나믹프로그래밍
- 컴퓨터사이언스
- 프로그래밍
- 캐나다
- 너비우선탐색
- 영어공부
- greedy
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함