반응형
https://www.acmicpc.net/problem/3085
3085번: 사탕 게임
예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.
www.acmicpc.net
1.문제설명
1. 서로 다른 사탕이 있으면 바꾼다.
2. 모든 행과 열에서 연속되는 최대 사탕의 수를 구해본다.
3. 1과 2를 모든 영역에 대해 반복해야한다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int n, ans;
char arr[51][51];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };
void Count() {
for (int i = 0; i < n; i++) {
int comp = arr[i][0];
int cnt = 1;
for (int j = 1; j < n; j++) {
if (comp == arr[i][j]) {
cnt++;
}
else {
comp = arr[i][j];
ans = max(ans, cnt);
cnt = 1;
}
}
ans = max(ans, cnt);
}
for (int i = 0; i < n; i++) {
int comp = arr[0][i];
int cnt = 1;
for (int j = 1; j < n; j++) {
if (comp == arr[j][i]) {
cnt++;
}
else {
comp = arr[j][i];
ans = max(ans, cnt);
cnt = 1;
}
}
ans = max(ans, cnt);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
for (int j = 0; j < n; j++) {
arr[i][j] = s[j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if (arr[i][j] != arr[nx][ny]) {
swap(arr[i][j], arr[nx][ny]);
Count();
swap(arr[i][j], arr[nx][ny]);
}
}
}
}
cout << ans << '\n';
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 11000번 : 강의실 배정 - 우선순위 큐 C++ (0) | 2022.03.07 |
---|---|
백준 2503번 : 숫자 야구 - 브루트포스 완전 탐색 (0) | 2022.03.06 |
백준 16500번 : 문자열 판별 - DP C++ (0) | 2022.03.06 |
백준 2294번 : 동전 2 - dp C++ (0) | 2022.03.05 |
백준 14499번 : 주사위 굴리기 (0) | 2022.03.05 |