๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 3085_์‚ฌํƒ• ๊ฒŒ์ž„

๋ฟŒ์•ผ._. 2024. 2. 7. 01:29

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/3085)

< ์‚ฌํƒ• ๊ฒŒ์ž„ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์‚ฌํƒ•์˜ ์ƒ‰์ด ๋‹ค๋ฅธ ์ธ์ ‘ํ•œ ๋‘ ์นธ์„ ๊ตํ™˜ํ•œ๋‹ค. ๊ตํ™˜ํ•œ ํ›„ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์—ฐ์† ๋ถ€๋ถ„์„ ๊ณ ๋ฅธ๋‹ค.

 

 

 my solution (Java)

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

public class _3085_ { // ์‚ฌํƒ• ๊ฒŒ์ž„
	static char arr[][];
	static int n, max;
	static int dx[] = { 1, 0 };
	static int dy[] = { 0, 1 };

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		n = Integer.parseInt(bf.readLine());

		arr = new char[n][n];
		max = 0;

		for (int i = 0; i < n; i++) {
			String str = bf.readLine();
			for (int j = 0; j < n; j++) {
				arr[i][j] = str.charAt(j);
			}
		}

		candy();

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				change(i, j);
			}
		}
		System.out.println(max);
	}

	private static void change(int x, int y) {
		for (int i = 0; i < 2; i++) {
			int a = x + dx[i];
			int b = y + dy[i];

			if (a >= 0 && a < n && b >= 0 && b < n && arr[x][y] != arr[a][b]) {
				char tempx = arr[x][y];
				char tempy = arr[a][b];

				arr[x][y] = tempy;
				arr[a][b] = tempx;

				candy();

				arr[x][y] = tempx;
				arr[a][b] = tempy;
			}
		}

	}

	private static void candy() {
		char x, y;
		int cnt1, cnt2;

		for (int i = 0; i < n; i++) {
			x = arr[i][0];
			y = arr[0][i];
			cnt1 = 1;
			cnt2 = 1;
			for (int j = 1; j < n; j++) {
				if (arr[i][j] == x) {
					cnt1 += 1;
				} else {
					if (max < cnt1) {
						max = cnt1;
					}
					x = arr[i][j];
					cnt1 = 1;
				}

				if (arr[j][i] == y) {
					cnt2 += 1;
				} else {
					if (max < cnt2) {
						max = cnt2;
					}
					y = arr[j][i];
					cnt2 = 1;
				}
			}
			if (max < cnt1) {
				max = cnt1;
			}
			if (max < cnt2) {
				max = cnt2;
			}
		}
	}
}
๋ณ€์ˆ˜)
n : ๋ณด๋“œ์˜ ํฌ๊ธฐ
arr : ๋ณด๋“œ ์ •๋ณด
max : ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜

 

๋ณด๋“œ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ํ›„ candy ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์‚ฌํƒ•์„ ๊ตํ™˜ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. ๋ณด๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์‚ฌํƒ•์„ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด change ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ตœ์ข… ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์ธ max๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

change (์ขŒํ‘œ)

ํ˜„์žฌ ์ขŒํ‘œ์˜ ์•„๋ž˜์™€ ์˜ค๋ฅธ์ชฝ์„ ํƒ์ƒ‰ํ•˜์—ฌ ๋ณด๋“œ ๋ฒ”์œ„ ์•ˆ์ด๊ณ , ์‚ฌํƒ•์˜ ์ƒ‰์ด ๋‹ค๋ฅด๋‹ค๋ฉด ์‚ฌํƒ•์„ ๊ตํ™˜ํ•œ๋‹ค. ๊ทธ ํ›„ ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด candy ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

candy

๊ฐ๊ฐ ํ–‰ ํƒ์ƒ‰, ์—ด ํƒ์ƒ‰์„ ํ†ตํ•ด ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.