https://www.acmicpc.net/problem/3085
๋ฌธ์
์๊ทผ์ด๋ ์ด๋ ธ์ ์ ์ "๋ด๋ณด๋ (Bomboni)" ๊ฒ์์ ์ฆ๊ฒจํ๋ค.
๊ฐ์ฅ ์ฒ์์ N×Nํฌ๊ธฐ์ ์ฌํ์ ์ฑ์ ๋๋๋ค. ์ฌํ์ ์์ ๋ชจ๋ ๊ฐ์ง ์์ ์๋ ์๋ค. ์๊ทผ์ด๋ ์ฌํ์ ์์ด ๋ค๋ฅธ ์ธ์ ํ ๋ ์นธ์ ๊ณ ๋ฅธ๋ค. ๊ทธ ๋ค์ ๊ณ ๋ฅธ ์นธ์ ๋ค์ด์๋ ์ฌํ์ ์๋ก ๊ตํํ๋ค. ์ด์ , ๋ชจ๋ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ถ๋ถ(ํ ๋๋ ์ด)์ ๊ณ ๋ฅธ ๋ค์ ๊ทธ ์ฌํ์ ๋ชจ๋ ๋จน๋๋ค.
์ฌํ์ด ์ฑ์์ง ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ทผ์ด๊ฐ ๋จน์ ์ ์๋ ์ฌํ์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๋ค. (3 ≤ N ≤ 50)
๋ค์ N๊ฐ ์ค์๋ ๋ณด๋์ ์ฑ์์ ธ ์๋ ์ฌํ์ ์์์ด ์ฃผ์ด์ง๋ค. ๋นจ๊ฐ์์ C, ํ๋์์ P, ์ด๋ก์์ Z, ๋ ธ๋์์ Y๋ก ์ฃผ์ด์ง๋ค.
์ฌํ์ ์์ด ๋ค๋ฅธ ์ธ์ ํ ๋ ์นธ์ด ์กด์ฌํ๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ทผ์ด๊ฐ ๋จน์ ์ ์๋ ์ฌํ์ ์ต๋ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<vector<char>> candy;
int dx[] = {0, 1};
int dy[] = {1, 0};
int countCandy() {
// ๊ฐ์ฅ ๊ธด ์ฐ์ ์ฌํ์ ๊ฐฏ์ ๋ฐํ ํจ์
int max_candy = 0;
// i๋ฒ์งธ ํ์ ๊ฐ์ฅ ๊ธด ์ฐ์ ๊ฐฏ์ ๊ตฌํ๊ธฐ
for(int i=0; i<n; i++) {
char prev = candy[i][0];
int cnt = 1;
for(int j=1; j<n; j++) {
if(prev == candy[i][j]) { // ์ฐ์
cnt++;
max_candy = max(max_candy, cnt);
} else { // ๋ถ์ฐ์
prev = candy[i][j];
cnt = 1;
}
}
}
// i๋ฒ์งธ ์ด์ ๊ฐ์ฅ ๊ธด ์ฐ์ ๊ฐฏ์ ๊ตฌํ๊ธฐ
for(int j=0; j<n; j++) {
char prev = candy[0][j];
int cnt = 1;
for(int i=1; i<n; i++) {
if(prev == candy[i][j]) {
cnt++;
max_candy = max(max_candy, cnt);
} else {
prev = candy[i][j];
cnt = 1;
}
}
}
return max_candy;
}
int solution() {
int ans = countCandy();
// ๋ชจ๋ ์ฌํ์ ๋ํด์
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++){
// ์ค๋ฅธ์ชฝ์ด๋ ์๋์ชฝ ์ฌํ๊ณผ ๊ตํ
for(int dir=0; dir<2; dir++) {
int x = i + dx[dir];
int y = j + dy[dir];
if(x>=n || y>=n)
continue;
if(candy[i][j] == candy[x][y])
continue;
swap(candy[i][j], candy[x][y]);
ans = max(ans, countCandy());
swap(candy[i][j], candy[x][y]); // ์ฐ์๊ฐฏ์ ์ ์ฅํด์ฃผ๊ณ ๋๋๋ฆฌ๊ธฐ
}
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
candy.assign(n, vector<char>(n));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin >> candy[i][j];
cout << solution();
return 0;
}
/*
*/
'๐ฒ Altu-Bitu > ๊ตฌํ&์๋ฎฌ๋ ์ด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S2][C++] ๋ฐฑ์ค 18111๋ฒ: ๋ง์ธํฌ๋ํํธ (0) | 2022.11.17 |
---|---|
[BOJ S4][C++] ๋ฐฑ์ค 1244๋ฒ: ์ค์์น ์ผ๊ณ ๋๊ธฐ (0) | 2022.10.17 |
[BOJ S3][C++] ๋ฐฑ์ค 2503๋ฒ: ์ซ์ ์ผ๊ตฌ (2%, 4%) (0) | 2022.10.06 |
[BOJ G5][C++] ๋ฐฑ์ค 20055๋ฒ: ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2022.10.03 |
[BOJ S1][C++] ๋ฐฑ์ค 20923๋ฒ: ์ซ์ ํ ๋ฆฌ๊ฐ๋ฆฌ ๊ฒ์ (0) | 2022.09.30 |