백준 - JAVA
3085번 : 사탕 게임
uhyvn
2023. 8. 21. 16:55
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;
public class p3085 {
static int max = 1; // 최솟값
static int n;
static char[][] board; // 보드판 생성
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
board = new char[n][n];
for (int i = 0; i < n; i++) {
String s = br.readLine();
for (int j = 0; j < n; j++) {
board[i][j] = s.charAt(j); // 보드판에 입력값 넣기 (보드판 채우기)
}
}
// 열마다 왼쪽에서 오른쪽으로만 탐색 (오른쪽 색상과 현재 색상 교환 후 돌려놓기)
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - 1; j++) {
swap(i, j, i, j + 1); // 오른쪽 색상과 교환
search(); // 바뀐 보드에서 최댓값 검색
swap(i, j + 1, i, j); // 교환한 색상 원상태로 돌려놓기
}
}
// 행마다 위쪽에서 아래쪽으로만 탐색 (아래쪽 색상과 현재 색상 교환 후 돌려놓기)
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n; j++) {
swap(i, j, i + 1, j); // 아래쪽 색상과 교환
search(); // 바뀐 보드에서 최댓값 검색
swap(i + 1, j, i, j); // 교환한 색상 원상태로 돌려놓기
}
}
System.out.println(max); // 최댓값(정답) 출력
}
// 사탕 교환 메서드
public static void swap(int x1, int y1, int x2, int y2) {
char temp = board[x1][y1];
board[x1][y1] = board[x2][y2];
board[x2][y2] = temp;
}
// 바뀐 보드에서 최댓값 검색 메서드
public static void search() {
// 행 기준 검색
for (int i = 0 ; i < n; i ++) {
int count = 1; // 최솟값(현재 기준이 되는 색상 1개)
for (int j = 0; j < n - 1; j++) {
// 같은 색상이면 카운트 후 최댓값 업데이트
if (board[i][j] == board[i][j + 1]) {
count++;
max = Math.max(count, max);
} else {
count = 1;
}
}
}
// 열 기준 검색
for (int i = 0 ; i < n; i ++) {
int count = 1;
for (int j = 0; j < n - 1; j++) {
if (board[j][i] == board[j + 1][i]) {
count++;
max = Math.max(count, max);
} else {
count = 1;
}
}
}
}
}