Rylah's Study & Daily Life
[BOJ/C++] 3085. 사탕 게임 본문
https://www.acmicpc.net/problem/3085
문제
상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다.
가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다.
사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50)
다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다.
사탕의 색이 다른 인접한 두 칸이 존재하는 입력만 주어진다.
출력
첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다.
풀이 방법
1. Brute Force
N이 50으로 매우 작으므로 2중 반복문인 Brute Force로 풀어도 충분한 시간이다.
1. 열인 j를 swap하고 가장 길이가 긴 문자의 수를 maxNum으로 Check
2. 행이 i를 swap하고 가장 길이가 긴 문자의 수를 maxNum으로 Check
swap을 하고나면 재 스왑으로 원상태로 복원하는 것은 필수
반복하면 결과가 도출된다.
// Code Plus BasicA
// 0x01. Brute Force
// Written by Rylah
// Written Date : 2022.01.15
// https://minteul.tistory.com/314
// https://www.acmicpc.net/source/37584615
// 3085. 사탕 게임
// Idea
// Brute Force
// j - Swap count Max
// i - swap count max
// result = max
// index warning
#include <bits/stdc++.h>
using namespace std;
string board[51];
int solve(int n)
{
int result = 1;
for (int i = 0; i < n; i++)
{
int cnt = 1;
for (int j = 1; j < n; j++)
{
if (board[i][j] == board[i][j - 1])
cnt++;
else
cnt = 1;
if (result < cnt)
result = cnt;
}
cnt = 1;
for (int j = 1; j < n; j++)
{
if (board[j][i] == board[j - 1][i])
cnt++;
else
cnt = 1;
if (result < cnt)
result = cnt;
}
}
return result;
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> board[i];
int maxNum = -1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (j + 1 < n)
{
swap(board[i][j], board[i][j + 1]);
maxNum = max(maxNum, solve(n));
swap(board[i][j], board[i][j + 1]);
}
if (i + 1 < n)
{
swap(board[i][j], board[i + 1][j]);
maxNum = max(maxNum, solve(n));
swap(board[i][j], board[i + 1][j]);
}
}
}
cout << maxNum << "\n";
return 0;
}
'BOJ > 03. Brute Force' 카테고리의 다른 글
[BOJ/C++] 1476. 날짜 계산 (0) | 2022.01.15 |
---|---|
[BOJ/C++] 2309. 일곱 난쟁이 (0) | 2022.01.14 |