ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 3085번: 사탕 게임
    Algorithm/백준 알고리즘 2021. 7. 19. 13:49


    문제 설명

    • 상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다.
    • 가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다.
    • 사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오.

     

    입력

    • 첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50)사탕의 색이 다른 인접한 두 칸이 존재하는 입력만 주어진다.
    • 다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다.

     

    출력

    • 첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다.

     

    코드

    /*
    - 빨간색 C
    - 파란색 P
    - 초록색 Z
    - 노란색 Y
    */
    import java.util.*;
    
    public class Main {
    	static int check(char[][] a) {
    		int n = a.length;
    		int ans = 1;
    		for (int i = 0; i < n; i++) {
    			int cnt = 1;
    			for (int j = 1; j < n; j++) {
    				if (a[i][j] == a[i][j - 1]) {
    					cnt += 1;
    				} else {
    					cnt = 1;
    				}
    				if (ans < cnt)
    					ans = cnt;
    			}
    			cnt = 1;
    			for (int j = 1; j < n; j++) {
    				if (a[j][i] == a[j - 1][i]) {
    					cnt += 1;
    				} else {
    					cnt = 1;
    				}
    				if (ans < cnt)
    					ans = cnt;
    			}
    		}
    		return ans;
    	}
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in); //사용자로부터 입력받기 위해 Scanner사용
    		int n = sc.nextInt(); //A x B행렬을 만들기 위해 숫자를 입력받는다.
    		char[][] a = new char[n][n]; //색상은 문자로 입력받기 때문에 배열을 선언한다.
    		for (int i = 0; i < n; i++) {
    			a[i] = sc.next().toCharArray(); //입력받은 문자열을 문자로 나누어 배열에 저장한다. => a[i][j]로 저장
    		}
    		int ans = 0; //최대로 획득할 수 있는 갯수를 저장하기 위한 변수
    		for (int i = 0; i < n; i++) {
    			for (int j = 0; j < n; j++) {
    				if (j + 1 < n) { //OutofIndex를 방지하기 위해 조건문 설정
    					char t = a[i][j];
    					a[i][j] = a[i][j + 1];
    					a[i][j + 1] = t;
    					int temp = check(a);
    					if (ans < temp)
    						ans = temp;
    					t = a[i][j];
    					a[i][j] = a[i][j + 1];
    					a[i][j + 1] = t;
    				}
    				if (i + 1 < n) { //OutofIndex를 방지하기 위해 조건문 설정
    					char t = a[i][j];
    					a[i][j] = a[i + 1][j];
    					a[i + 1][j] = t;
    					int temp = check(a);
    					if (ans < temp)
    						ans = temp;
    					t = a[i][j];
    					a[i][j] = a[i + 1][j];
    					a[i + 1][j] = t;
    				}
    			}
    		}
    		System.out.println(ans);
    	}
    }

    'Algorithm > 백준 알고리즘' 카테고리의 다른 글

    [JAVA] 1748번: 수 이어 쓰기1  (0) 2021.07.20
    [JAVA] 2309번: 일곱 난쟁이  (0) 2021.07.19
    [JAVA] 1929번: 소수 구하기  (0) 2021.07.18
    [JAVA] 17427번: 약수의 합2  (0) 2021.07.18
    [JAVA] 1935번: 후위 표기식2  (0) 2021.07.12

    댓글

[Everything's gonna be fine]