본문 바로가기
알고리즘

알고리즘 스터디

by COCO1337 2021. 11. 27.

 

 

https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

DFS를 사용해서 금방 해결했다.

25%에서 에러가 발생했었는데

기존에 사용했던 check 벡터와 v 벡터의 초기화를 해주지 않아서 발생한 문제였다

때문에 새로 시작할때 v.assign, check.assign으로 vector를 다시 초기화해서 해결했다

#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#define ll long long int

// https://www.acmicpc.net/problem/1012

using namespace std;

int t, m, n, k;
int x, y;
int cnt;

vector<vector<bool>> v;
vector<int> dx = {-1, 1, 0, 0};
vector<int> dy = {0, 0, 1, -1};
vector<vector<bool>> check;

void Dfs(int a, int b) {
  check[a][b] = true;
  for (int i = 0; i < 4; ++i) {
    int p = a + dx[i];
    int q = b + dy[i];

    if (p >= 0 && p < m && q >= 0 && q < n)
      if (!check[p][q] && v[p][q]) Dfs(p, q);
  }
}

void Solve() {
  cin >> m >> n >> k;
  cnt = 0;
  v.assign(51, vector<bool>(51, false));
  check.assign(51, vector<bool>(51, false));
  for (int i = 0; i < k; ++i) {
    cin >> x >> y;
    v[x][y] = true;
  }

  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j) {
      if (!check[i][j]&& v[i][j]) {
        Dfs(i, j);
        cnt++;
      }
    }
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> t;

  for (int i = 0 ; i < t; ++i) {
    Solve();
    cout << cnt << '\n';
  }

  return 0;
}

 

 

반응형

'알고리즘' 카테고리의 다른 글

알고리즘 스터디  (0) 2021.12.16
알고리즘 스터디  (0) 2021.12.07
알고리즘 스터디  (0) 2021.11.22
알고리즘 스터디  (0) 2021.09.28
알고리즘 - Google Kickstart 2021 B 1번  (0) 2021.09.07

댓글