11달 전에도 풀었고 6달 전에도 풀었던 문제를 오랜만에 감좀 익힐겸 다시 풀어봤다.

역시 basic했다고 할 수 있다. 뭐 원샷 원킬했다!

BFS오랜만에 해봤는데 예전에 외웠던 코드들이 아직도 기억에 남아있는것같다.

앞으로도 까먹지않게 종종 연습하고 진도를 쭉쭉 나가야겠다.

이거 코드는 보면 바로 이해가 갈 것이다.

#include <iostream>
#include<queue>

struct Que {
	int x;
	int y;
};



int board[501][501];
bool vis[501][501];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };



using namespace std;

int main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	int a, b;
	cin >> a >> b;//가로 세로길이

	for (int i = 0; i < a; i++) {
		for (int j = 0; j < b; j++) {
			cin >> board[i][j];
		}
	}
	queue<Que> Q;
	Que q;
	int count = 0;
	int max = 0;
	int area = 0;
	for (int i = 0; i < a; i++) {
		for (int j = 0; j < b; j++) {
			if (board[i][j] == 1 && vis[i][j] == false) {
				Q.push({ i, j });
				vis[i][j] = true;
				count++;
			}

			while (!Q.empty()) {
				q = Q.front();
				Q.pop();
				
				area++;

				
				for (int k = 0; k < 4; k++) {
					if (q.x + dx[k]<0 or q.x + dx[k]>=a or q.y + dy[k]<0 or q.y + dy[k]>=b)continue;
					if (board[q.x + dx[k]][q.y + dy[k]] == 1 && vis[q.x + dx[k]][q.y + dy[k]] == false) {
						Q.push({q.x + dx[k],q.y + dy[k]});
						vis[q.x+dx[k]][q.y+dy[k]] = true;
					}
				}
			}
			if (max < area) {
				max = area;
			}
			area = 0;


		}
	}
	cout << count << endl << max;

}

+ Recent posts