<Baekjoon> #3085 사탕 게임 (Bomboni Game)

Google 아니고 Joogle·2021년 10월 26일
0

Baekjoon

목록 보기
3/47
post-thumbnail

브루트 포스 문제를 많이 안 풀어봐서 그런지.. 코드짜기가 귀찮은 건지.. 아직 어렵다.. 근데 그냥 모든 경우의 수를 계산해보면 된다. 이거는 다른 사람의 코드를 참고했다.

  1. 1행, 2행... 부터 시작해서 같은 행에서 인접한 두 칸을 교환한다.
  2. 교환했을 때 check()함수에서 가장 긴 연속하는 알파벳 갯수를 maxLen에 저장한다.
  3. 교환했던 두 칸을 다시 원래 칸으로 되돌려 놓는다.
  4. 1열, 2열... 부터 시작해서 같은 열에서 인접한 두 칸을 교환한다.
  5. 교환했을 때 check()함수에서 가장 긴 연속하는 알파벳 갯수를 maxLen에 저장한다.
  6. 교환했던 두 칸을 다시 원래 칸으로 되돌려 놓는다.

#include<iostream>
#include<algorithm>

using namespace std;
const int MAX = 51;

int N;
int maxLen = 1;
char candy[MAX][MAX];

void check() {
	char c;
	for (int i = 0; i < N; i++) {
		int cnt = 1;
		c = candy[i][0];
		for (int j = 1; j < N; j++) {
			if (candy[i][j] == c)
				cnt++;
			else {
				cnt= 1;
				c = candy[i][j];
			}
			if (maxLen < cnt) maxLen = cnt;
		}
		
	}

	for (int j = 0; j < N; j++) {
		int cnt = 1;
		c = candy[0][j];
		for (int i = 1; i < N; i++) {
			if (candy[i][j] == c)
				cnt++;
			else {
				cnt = 1;
				c = candy[i][j];
			}
			if (maxLen < cnt) maxLen = cnt;
		}	
	}
}
void bomboniGame() {
	for (int i = 0; i < N; i++) 
		for (int j = 0; j < N-1; j++) {
			swap(candy[i][j], candy[i][j + 1]);
			check();
			swap(candy[i][j], candy[i][j + 1]);
		}

	for (int j=0; j<N; j++) 
		for (int i = 0; i < N- 1; i++) {
			swap(candy[i][j], candy[i + 1][j]);
			check();
			swap(candy[i][j], candy[i + 1][j]);
		}
	cout << maxLen << endl;
}

void input() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cin >> candy[i][j];
		}
	}
}
int main() {
	input();
	bomboniGame();

	return 0;
}

문제가 어려운 문제는 아닌데 귀찮고 반복문 돌릴 때 N의 범위를 주의해야 한다. 귀찮아도 브루트 포스 문제를 여러번 풀어보자!!!

profile
Backend 개발자 지망생

0개의 댓글