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 |
Tags
- DP
- sw expert academy
- 완전탐색
- 에라토스테네스의 체
- 시뮬레이션
- 삼성 기출
- Algorithm
- dynamic programming
- 그리디
- 소수
- koitp
- 브루트포스
- PS
- 구현
- 다이나믹 프로그래밍
- hackerrank
- dfs
- SWEA
- 백준
- C++
- BFS
- BOJ
- 해커랭크
- 알고리즘
- 삼성 SDS 대학생 알고리즘 특강
- 맛집
- 동적 계획법
- 스택
- 백트래킹
- 잠실
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 2583 영역 구하기 본문
문제링크 : https://noj.am/2583
단순 DFS/BFS 문제이다.
계산하기 편하게 (1,1)~(N,M)의 영역을 사용한다.
초기에 테두리를 방문한 것으로 체크하고 내부를 미방문한 상태로 초기화 시키면 ▣ <- 이런 형태로 만들어진다.
입력된 사각형은 (x1+1, y2+1)~(x2, y2)의 영역으로 방문 체크를 해주는 것으로 구현하였다.
dfs를 실행할 때마다 cnt 변수를 통해 칸을 체크해준다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // BOJ 2583 영역 구하기 #include <iostream> #include <vector> #include <algorithm> using namespace std; int cnt = 0; const int dx[] = {0, 0, -1, 1}; const int dy[] = {-1, 1, 0, 0}; vector<vector<bool> > arr; void dfs(int x, int y) { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (!arr[nx][ny]) { cnt++; arr[nx][ny] = true; dfs(nx, ny); } } } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); freopen("../input.txt", "r", stdin); int X, Y, K; cin >> Y >> X >> K; // true : 방문, false : 미방문 // 테두리를 방문한 것으로 만들고 내부는 미방문 상태로 초기화 arr = vector<vector<bool> >(X + 2, vector<bool>(Y + 2, true)); for (int i = 1; i <= X; i++) for (int j = 1; j <= Y; j++) arr[i][j] = false; // 사각형 영역을 방문한 것으로 입력 for (int i = 1; i <= K; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; for (int x = x1 + 1; x <= x2; x++) for (int y = y1 + 1; y <= y2; y++) arr[x][y] = true; } // 결과 카운팅 vector<int> result; for (int x = 1; x <= X; x++) { for (int y = 1; y <= Y; y++) { if (!arr[x][y]) { cnt = 1; arr[x][y] = true; dfs(x, y); result.push_back(cnt); } } } sort(result.begin(), result.end()); cout << result.size() << '\n'; for (int i : result) cout << i << ' '; return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 백준 BOJ 9935 문자열 폭발 (0) | 2018.10.08 |
---|---|
[C++] 백준 BOJ 9095 1,2,3 더하기 (0) | 2018.10.06 |
[C++] Codeforces Round #514 (Div. 2) - C. Sequence Transformation (0) | 2018.10.06 |
[C++] Codeforces Round #514 (Div. 2) - A. Cashier (0) | 2018.10.06 |
[C++] 백준 BOJ 13458 시험 감독 (0) | 2018.10.05 |
Comments