하루 1문제 챌린지/Silver2

백준 3085 사탕게임 C++

그린푸딩 2024. 1. 31. 23:34
728x90
반응형

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

 

#include <iostream>
#include <vector>

using namespace std;

int n;
vector<vector<char>>arr;

int check() {

	//최대 연속 갯수 
	//행,열 
	int cnt1 = 1;
	int cnt2 = 1;
	int maxs = 1;

	for (int i = 0; i < n; i++) {
		cnt1 = 1; 
		cnt2 = 1;
		for (int j = 1; j < n; j++) {
			if (arr[i][j - 1] == arr[i][j]) {
				cnt1++;
				maxs = max(maxs, cnt1);
			}
			else cnt1 = 1;

			if (arr[j - 1][i] == arr[j][i]) {
				cnt2++;
				maxs = max(maxs, cnt2);
			}
			else cnt2 = 1;
		}
	}
	

	return maxs;
}


int main() {

	cin >> n;
	arr.assign(n, vector<char>(n, 0));
	int ans = 0;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> arr[i][j];
		}
	}

	//C P Z Y 
	//인접한 두칸 변경 오른쪽, 아래 

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n-1; j++) {
			//오른쪽 변경 
			if (arr[i][j] != arr[i][j + 1]) {
				char tmp = arr[i][j];
				arr[i][j] = arr[i][j + 1];
				arr[i][j + 1] = tmp;
				ans=max(ans,check()); 

				arr[i][j + 1] = arr[i][j];
				arr[i][j] = tmp;
			}

			//위아래 변경
			if (arr[j][i] != arr[j+1][i]) {
				char tmp = arr[j][i];
				arr[j][i] = arr[j + 1][i];
				arr[j + 1][i] = tmp;
				ans = max(ans, check());

				arr[j + 1][i] = arr[j][i];
				arr[j][i] = tmp;
			}


		}
	}

	cout << ans;

}

틀렸습니다 

#include <iostream>
#include <vector>

using namespace std;

int n;
vector<vector<char>>arr;

int check() {

	//최대 연속 갯수 
	//행,열 
	int cnt1 = 1;
	int cnt2 = 1;
	int maxs = 0;

	for (int i = 0; i < n; i++) {
		cnt1 = 1; cnt2 = 1;
		for (int j = 0; j < n-1; j++){
			
			//헹
			if (arr[i][j] == arr[i][j + 1])cnt1++;
			else {
				if (cnt2 > 1) {
					maxs = max(cnt2, maxs);
				}
				cnt1 = 1;
			}	
			//열 
			if (arr[j][i] == arr[j+1][i])cnt2++;
			else {
				if (cnt2 > 1) {
					maxs = max(cnt2, maxs);
				}
				cnt2 = 1;
			}
    	}
		if (cnt1 > 1) {
			maxs = max(cnt1, maxs);
		}
		if (cnt2 > 1) {
			maxs = max(cnt2, maxs);
		}
	}
	return maxs;
}


int main() {

	cin >> n;
	arr.assign(n, vector<char>(n, 0));
	int ans = 0;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> arr[i][j];
		}
	}

	//C P Z Y 
	//인접한 두칸 변경 오른쪽, 아래 

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n-1; j++) {
			//오른쪽 변경 
			if (arr[i][j] != arr[i][j + 1]) {
				char tmp = arr[i][j];
				arr[i][j] = arr[i][j + 1];
				arr[i][j + 1] = tmp;
				ans=max(ans,check()); 

				arr[i][j + 1] = arr[i][j];
				arr[i][j] = tmp;
			}

			//위아래 변경
			if (arr[j][i] != arr[j+1][i]) {
				char tmp = arr[j][i];
				arr[j][i] = arr[j + 1][i];
				arr[j + 1][i] = tmp;
				ans = max(ans, check());

				arr[j + 1][i] = arr[j][i];
				arr[j][i] = tmp;
			}


		}
	}

	cout << ans;

}

 

행열 카운트 부분 바꿨는데 통과 

왜맞앗지 

728x90
반응형