Java/Algorithm

[Java-Algorithm] 백준 3085 사탕게임 풀이

Jeong Jeon
반응형

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

 

3085번: 사탕 게임

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

www.acmicpc.net

 

풀이 : 

브루트 포스 문제이다.

결국 모든 경우의 수를 다 체크해야된다는건데....

for문의 집합체인것 같다..

 

경우의수를 모두 체크해주면된다.

1). 오른쪽 왼쪽을 바꿨을때 => 가로

2). 위아래를 바꿨을때 => 세로

대각선은 제외하고 두가지만 체크해서 먹을 수 있는 갯수를 확인한다.

 

static int result;
	static char[][] arr;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		arr = new char[n][n];
		//일단 arr에 다 넣어주자
		for (int i = 0; i < n; i++) {
			arr[i] = br.readLine().toCharArray();
		}
		
		//다넣었으면 한칸씩 오른쪽 위아래 교환해보자.
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n-1; j++) {//0,1 => 왼쪽 오른쪽을 바꾸는건 같으니까 마지막은 그대로
				char tmp = arr[i][j];
				//오른쪽 왼쪽 교환 후 확인
				arr[i][j] = arr[i][j + 1];
	            arr[i][j + 1] = tmp;
	            check();
	            tmp = arr[i][j + 1];
	            arr[i][j + 1] = arr[i][j];
	            arr[i][j] = tmp;
	 
	            tmp = arr[j][i];
	            arr[j][i] = arr[j + 1][i];
	            arr[j + 1][i] = tmp;
	            check();
	            tmp = arr[j + 1][i];
	            arr[j + 1][i] = arr[j][i];
	            arr[j][i] = tmp;
			}
		}
		
		System.out.println(result);
	}
	
	static void check() {
		//양옆 체크
		for (int i = 0; i < arr.length; i++) {
			int check= 1;//한개는 무조건 먹으니까 0이 아님
			for (int j = 1; j < arr.length; j++) {
				if(arr[i][j] == arr[i][j-1]) {
					++check; //+1 해준다.
				}else {
					result = result < check ? check : result;
					check =1;
				}
			}
			result = result < check ? check : result;
		}
		
		//위아래 체크
		for (int i = 0; i < arr.length; i++) {
			int check = 1;
			for (int j = 1; j < arr.length; j++) {
				if(arr[j][i] == arr[j-1][i]) {
					++check;
				}else {
					result = result < check ? check : result;
					check =1;
				}
			}
			result = result < check ? check : result;
		}
	}
반응형