๋ฌธ์
https://www.acmicpc.net/problem/3085
๋ฌธ์ ์ดํด
- N×N ํฌ๊ธฐ์ ๋ณด๋์ ์ฌํ์ 4๊ฐ์ง ์์ผ๋ก ์ฑ์์ ธ์๋ค.
- ์ธ์ ํ ๋ ์นธ์ ๊ณจ๋ผ ์ฌํ์ ์๋ก ๊ตํํ๋ค.
- ํ ๋๋ ์ด์์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ์ ๊ตฌํ๋ค.
๋ฌธ์ ํ์ด
๐ ์ ๊ทผ
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด๋ณด๋ฉด,
์ฌํ์ ๊ตํํ๋ ๋ฐ N * N, ์ฐ์ํ๋ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฐ N * N ์ด๋ฏ๋ก ์ด O(N^4)์ด๋ค.
N ≤ 50์ด๋ฏ๋ก ์ ํ์๊ฐ ๋ด์ ๊ณ์ฐํ ์ ์๋ค.
๐ก ๋ธ๋ฃจํธํฌ์ค
- ํ/์ด์์ ์ธ์ ํ ๋ ์นธ์ ๊ณจ๋ผ ์๋ก ์ฌํ์ ๊ตํํ๋ค.
- ์ฐ์ํ๋ ํ/์ด์ ์ต๋ ๊ฐ์๋ฅผ ์ฐพ๋๋ค.
1ํ ๊ตํํ ๋๋ง๋ค ์ต๋ ๊ฐ์๋ฅผ ์ฐพ๋๋ค.
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
/*
1. ํ/์ด์์ ์ธ์ ํ ๋ ์นธ์ ๊ณจ๋ผ ์๋ก ์ฌํ์ ๊ตํํ๋ค.
2. ์ฐ์ํ๋ ํ/์ด์ ์ต๋ ๊ฐ์๋ฅผ ์ฐพ๋๋ค.
*/
int checkMax(int n, vector<vector<char>> &board) {
int cnt, ret = 1;
// ํ์์ ์ฐ์ ๊ฐ์
for (int i = 0; i < n; i++) {
cnt = 1;
for (int j = 1; j < n; j++) {
if (board[i][j] == board[i][j - 1]) cnt++;
else cnt = 1;
ret = max(cnt, ret);
}
}
// ์ด์์ ์ฐ์ ๊ฐ์
for (int j = 0; j < n; j++) {
cnt = 1;
for (int i = 1; i < n; i++) {
if (board[i][j] == board[i - 1][j]) cnt++;
else cnt = 1;
ret = max(cnt, ret);
}
}
return ret;
}
int swapCandy(int n, vector<vector<char>> &board) {
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// ํ ํ์
if (j < n - 1) {
swap(board[i][j], board[i][j + 1]);
ans = max(ans, checkMax(n, board));
swap(board[i][j], board[i][j + 1]);
}
// ์ด ํ์
if (i < n - 1) {
swap(board[i][j], board[i + 1][j]);
ans = max(ans, checkMax(n, board));
swap(board[i][j], board[i + 1][j]);
}
}
}
return ans;
}
int main() {
int n;
cin >> n;
vector<vector<char>> board(n, vector<char>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> board[i][j];
}
}
cout << swapCandy(n, board);
return 0;
}
'๐ญ Problem Solving > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ][C++] ๋ฐฑ์ค 1260๋ฒ: DFS์ BFS (0) | 2025.04.23 |
|---|---|
| [BOJ][C++] ๋ฐฑ์ค 2667๋ฒ: ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2024.11.11 |
| [BOJ][C++] ๋ฐฑ์ค 1789๋ฒ: ์๋ค์ ํฉ (0) | 2024.10.29 |
| [BOJ][C++] ๋ฐฑ์ค 15650๋ฒ: N๊ณผ M (2) (0) | 2024.10.28 |
| [BOJ][C++] ๋ฐฑ์ค 15649๋ฒ: N๊ณผ M (1) (0) | 2024.10.28 |