본문 바로가기
알고리즘/Backjoon

B3085 : 사탕 게임

by 뚱키 2022. 2. 14.
728x90
난이도 Silver3
링크 https://www.acmicpc.net/problem/3085

문제 사진


풀이.

다해보는 부르트포스 문제

구현처럼 풀면 된다.

logic.

1. 사탕의 색이 다른 인접한 두 칸을 고른다.

2. 고른 칸 안에 들어있는 사탕을 서로 교환한다.

3. 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분을 고른다.

4. 최대값을 갱신한다.


소스코드.

public class B3085 {
	static int max=0;
	static int N;
	public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		N=Integer.parseInt(br.readLine());
		char[][] map=new char[N][N];
		for(int i=0;i<N;i++) {
			map[i]=br.readLine().toCharArray();
		}
		
		//가로
		for(int i=0;i<N;i++) {
			for(int j=0;j<N-1;j++) {
				if(map[i][j]!=map[i][j+1]) {
					char temp=map[i][j];
					
					map[i][j]=map[i][j+1];
					map[i][j+1]=temp;
					
					arrCheck(map);
					
					map[i][j+1]=map[i][j];
					map[i][j]=temp;
					
				}
			}
		}
		
		//세로
		for(int i=0;i<N;i++) {
			for(int j=0;j<N-1;j++) {
				if(map[j][i]!=map[j+1][i]) {
					char temp=map[j][i];
					
					map[j][i]=map[j+1][i];
					map[j+1][i]=temp;
					
					arrCheck(map);
					
					map[j+1][i]=map[j][i];
					map[j][i]=temp;
					
				}
			}
		}
		System.out.println(max);
	}
	public static void arrCheck(char[][] map) {
		//가로
		for(int i=0; i<N;i++) {
			int count=1;
			
			for(int j=0;j<N-1;j++) {
				if(map[i][j]==map[i][j+1]) {
					count++;
				}else {
					count=1;
				}
				
				max=Math.max(count, max);
			}
		}
		
		
		//세로
		for(int i=0; i<N;i++) {
			int count=1;
			
			for(int j=0;j<N-1;j++) {
				if(map[j][i]==map[j+1][i]) {
					count++;
				}else {
					count=1;
				}
				
				max=Math.max(count, max);
			}
		}
	}
}

후기.

풀 수 있는 logic을 결정하고 순서대로 구현하면 되는 문제

기업 코테도 이만치 했으면 좋겠다

728x90

'알고리즘 > Backjoon' 카테고리의 다른 글

B16948 : 데스 나이트  (0) 2022.02.23
18258 : 큐 2  (0) 2022.02.22
B18108: 1998년생인 내가 태국에서는 2541년생?!  (0) 2022.02.12
5567번: 결혼식  (0) 2020.02.23
4948번: 베르트랑 공준  (0) 2020.02.23

댓글