※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 6199번 문제인 Big Square이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/6199
100행100열의 격자에서 정사각형이 되게끔 네 점을 고르는 경우의 수는 충분히 적다(1000만 이하)는 점을 관찰하자.
이 점을 이용하면 가능한 모든 정사각형 네 점의 위치에 한 번씩 접근하여 해당 정사각형을 이룰 수 있는지 확인 및 넓이 계산을 반복하는 완전탐색으로 가능한 정사각형의 넓이의 최댓값을 계산할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N;
char board[100][100];
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
cin >> board[r][c];
}
}
for (int dr = 0; dr < N; dr++) {
for (int dc = 0; dr + dc < N; dc++) {
for (int r = dc; r + dr < N; r++) {
for (int c = 0; c + dr + dc < N; c++) {
int jcnt = 0, bcnt = 0, acnt = 0;
if (board[r][c] == 'J') jcnt++;
else if (board[r][c] == 'B') bcnt++;
else acnt++;
if (board[r + dr][c + dc] == 'J') jcnt++;
else if (board[r + dr][c + dc] == 'B') bcnt++;
else acnt++;
if (board[r + dr - dc][c + dc + dr] == 'J') jcnt++;
else if (board[r + dr - dc][c + dc + dr] == 'B') bcnt++;
else acnt++;
if (board[r - dc][c + dr] == 'J') jcnt++;
else if (board[r - dc][c + dr] == 'B') bcnt++;
else acnt++;
if (jcnt == 4 || (jcnt == 3 && acnt == 1)) ans = max(ans, (dr + dc) * (dr + dc) - 2 * dr * dc);
}
}
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 19686 // C++] Lost Array (0) | 2024.09.08 |
---|---|
[BOJ 14488 // C++] 준오는 급식충이야!! (1) | 2024.09.07 |
[BOJ 7088 // C++] Word counting (1) | 2024.09.05 |
[BOJ 7804 // C++] Taxi! (3) | 2024.09.04 |
[BOJ 14265 // C++] 영선 수열 (3) | 2024.09.03 |