티스토리 뷰
1. 문제
https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
2. 문제 풀이
#include <iostream>
#include <bits/stdc++.h>
#pragma warning (disable:4996)
#define X first
#define Y second
using namespace std;
int MAP[505][505];
int vis[505][505];
int dx[4] = { 1, 0, -1, 0 };
int dy[4] = { 0, 1, 0 , -1 };
int num, mx;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> MAP[i][j];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (MAP[i][j] == 0 || vis[i][j]) continue;
num++;
queue <pair<int, int>> Q;
int sqr = 0;
Q.push({ i,j });
vis[i][j] = 1;
while (!Q.empty()) {
sqr++;
auto cur = Q.front(); Q.pop();
for (int dir = 0; dir < 4; dir++) {
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
if (vis[nx][ny] || MAP[nx][ny] == 0) continue;
Q.push({ nx, ny });
vis[nx][ny] = 1;
}
}
mx = max(sqr, mx);
}
}
cout << num << '\n' << mx;
}
3. 문제 평가 및 해설
코딩테스트 단골 문제인 BFS의 기초 문제이다.
컴퓨터 공학 관련 전공을 한 학생들이라면, 자료구조나 알고리즘에서 BFS를 배웠을 것이다.
나는 '알고리즘 '에서 BFS는 트리 노드에서 노드를 효율적으로 탐색하는 방식으로 배웠다. 하지만 BFS는 너비 우선 탐색이기 때문에, 노드를 효율적으로 찾는 알고리즘에만 사용되지는 않는다. 대표적으로 미로찾기나 Flood fill과 같은 문제에 많이 사용된다. 코딩테스트에서도 노드를 탐색하는 방법(전위순회,후위순회...)보다 BFS와 map을 활용해서 문제를 해결하는 문제를 많이 내는 것 같다. BFS가 까먹었따고 생각할 때, 한번쯤 와서 풀어보면 좋은 문제인 것 같다.
풀이 방법은 정말로 BFS 알고리즘 그 자체이기 때문에, 생략하겠다.
'백준(C++) > 문제풀이' 카테고리의 다른 글
[백준 7576/C++] 토마토 (0) | 2023.07.29 |
---|---|
[백준 2178/C++] 미로 탐색 (0) | 2023.07.28 |
[백준 3986/C++] 좋은 단어 (0) | 2023.07.21 |
[백준 4949/C++] 균형잡힌 세상 (0) | 2023.07.19 |
[백준 5430/C++] AC (0) | 2023.07.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- constraint missing 오류
- 백준 5430
- 백준 1697
- 안드로이드 스튜디오
- 백준 1021
- 백준 4949
- C++ #알고리즘 #코딩테스트
- 문제 유형
- 알고리즘 #백준 3273 #C++
- 백준1158
- C++
- 백준 2178
- 알고리즘 풀이
- AAR metadata 에러
- #include<bits/stdc++.h> # Visual studio #코딩테스트 꿀팁 #알고리즘 풀이
- 백준 #알고리즘 풀이 #백준 1475
- 백준 3986
- 백준 7569
- android studio
- 백준 2164
- 백준 7576
- 백준 4179
- 백준 2493
- 알고리즘 정리
- 코딩테스트
- 알고리즘
- Render Problem
- C++ #알고리즘 #연결리스트
- ViewBinding
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함