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

 

3085번: 사탕 게임

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

www.acmicpc.net

코드설명

구현과 브루트포스 문제입니다.

 

문제에 주어진대로 그대로 구현하면 되는 문제입니다.

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static int N;
	public static int answer = 0;
	public static char[][] map;
	public static int[] dx = {-1,1,0,0}; //상, 하, 좌, 우
	public static int[] dy = {0,0,-1,1}; //상, 하, 좌, 우
    public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	
    	N = Integer.parseInt(st.nextToken());
    	map = new char[N][N];
    	for(int i=0;i<N;i++) {
    		st = new StringTokenizer(br.readLine());
    		map[i] = st.nextToken().toCharArray();
    	}
    	
    	simulate();
    	System.out.println(answer);
    }
    public static void simulate() {
    	
    	for(int i=0;i<N;i++) {
    		for(int j=0;j<N;j++) {
    			
    			for(int dir = 0; dir<4;dir++) {
    				int nr = i + dx[dir];
    				int nc = j + dy[dir];
    				if(nr < 0 || nr >= N || nc < 0 || nc >= N) continue;
    				// ijTemp map[i][j] 
    				// nrncTemp map[nr][nc]
    				char ijTemp;
    				char nrncTemp;
    				if(map[i][j] != map[nr][nc]) {
    					ijTemp = map[i][j];
    					nrncTemp = map[nr][nc];
    					map[i][j] = map[nr][nc];
    					map[nr][nc] = ijTemp;
        				checkLine();
        				if(answer == N) {
        					System.out.println(answer);
        					System.exit(0);
        				}
    					map[i][j] = ijTemp;
    					map[nr][nc] = nrncTemp;
    				}

    				
    			}
    			
    		}
    	}
    	
    	
    }
    
    public static void checkLine() {
    	
    	//행 먼저 검사
    	for(int i=0;i<N;i++) {
    		int temp = 0;
    		char start = map[i][0]; //일단 초기화.
    		for(int j=0;j<N;j++) {
    			if(start == map[i][j]) {
    				temp += 1;
    			}else if(start != map[i][j]) {
    				answer = Math.max(answer,  temp);
    				temp = 1;
    				start = map[i][j];
    			}
    		}
    		answer = Math.max(answer,  temp);
    	}
    	
    		
    	//열 검사
    	for(int i=0;i<N;i++) {
    		int temp = 0;
    		char start = map[i][0]; //일단 초기화.
    		for(int j=0;j<N;j++) {
    			if(start == map[j][i]) {
    				temp += 1;
    			}else if(start != map[j][i]) {
    				answer = Math.max(answer,  temp);
    				temp = 1;
    				start = map[j][i];
    			}
    		}
    		answer = Math.max(answer,  temp);
    	}
    	
    }
    
    
}

+ Recent posts