3085번 : 사탕 게임 [Java]

2021. 4. 9. 22:49Algorithm/백준

반응형

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

 

3085번: 사탕 게임

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

www.acmicpc.net

 

해결 방안

이차원 배열을 받은 뒤 세로, 가로로 돌아보며 바꿀 수 있다면 바꾸고 가장 긴 연속 부분을 찾는다.

연속 부분을 찾는 과정이 끝나면 바꾼 두 위치를 다시 되돌려놓는다.

 

주의할 점

문제를 제대로 읽자

1. 사탕의 색이 다른 인접한 두 칸을 골라야 하며,

2. 사탕의 색이 다른 인접한 두 칸이 존재하는 입력만 주어진다

 

아쉬운 점

중복되는 코드가 많아 코드가 지저분하고 길다,, 중복된 코드를 합칠 방법을 찾아볼까

 

전체 코드

import java.util.Scanner;

public class Main {
	static int N;
	static char[][] map;
	static int cnt, ans;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		map = new char[N][N];

		for (int i = 0; i < N; i++) {
			String s = sc.next();
			for (int j = 0; j < N; j++) {
				map[i][j] = s.charAt(j);
			}
		}

		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;

					cnt();

					temp = map[i][j];
					map[i][j] = map[i][j + 1];
					map[i][j + 1] = temp;
				}
			}
		}

		for (int j = 0; j < N; j++) {
			for (int i = 0; i < N - 1; i++) {
				if (map[i][j] != map[i + 1][j]) {
					char temp = map[i][j];
					map[i][j] = map[i + 1][j];
					map[i + 1][j] = temp;

					cnt();

					temp = map[i][j];
					map[i][j] = map[i + 1][j];
					map[i + 1][j] = temp;
				}
			}
		}

		System.out.println(ans);

	}

	private static void cnt() {

		for (int i = 0; i < N; i++) {
			cnt = 0;
			char temp = map[i][0];
			for (int j = 0; j < N; j++) {
				if (temp != map[i][j]) {
					ans = Math.max(cnt, ans);
					temp = map[i][j];
					cnt = 1;
				} else
					cnt++;
			}
			ans = ans < cnt ? cnt : ans;
		}

		for (int j = 0; j < N; j++) {
			cnt = 0;
			char temp = map[0][j];
			for (int i = 0; i < N; i++) {
				if (temp != map[i][j]) {
					ans = Math.max(cnt, ans);
					temp = map[i][j];
					cnt = 1;
				} else
					cnt++;
			}
			ans = ans < cnt ? cnt : ans;
		}
	}
}
반응형

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

5014번 : 스타트링크 [Java]  (0) 2021.04.11
2251번 : 물통 [Java]  (0) 2021.04.09
2583번 : 영역 구하기 [Java]  (0) 2021.04.09
17103번 : 골드바흐 파티션 [Java]  (0) 2021.03.31
14503번 : 로봇 청소기 [Java]  (0) 2021.03.31