https://www.acmicpc.net/problem/3085
3085๋ฒ: ์ฌํ ๊ฒ์
์์ 3์ ๊ฒฝ์ฐ 4๋ฒ ํ์ Y์ C๋ฅผ ๋ฐ๊พธ๋ฉด ์ฌํ ๋ค ๊ฐ๋ฅผ ๋จน์ ์ ์๋ค.
www.acmicpc.net
import java.io.FileInputStream;
import java.util.Scanner;
class Main{
public static void main(String[] args) throws Exception{
System.setIn(new FileInputStream("res/input.txt"));
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
char[][] map = new char[n][n];
for(int i=0; i<n; i++){
char[] input = sc.nextLine().toCharArray();
int idx = 0;
for(char k: input){
map[i][idx] = k;
}
}
int ans = 0;
// ์๋ก ๋ค๋ฅธ ๋ ๊ฐ๊ฐ ์ธ์ ํด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ผ ๋จ
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
// j+1 ์ฒดํฌ
if(j == n-1){ // ๋ง์ง๋ง ์ด์ ๋์ผ ํ ๋ค์ ์์ ๋น๊ต x
// i+1 ์ฒดํฌ
if(i == n-1){ // ๋ง์ง๋ง ํ์ ๋์ผ ์ด ๋ค์ ์์ ๋น๊ต x
// ๋งจ ๋ง์ง๋ง ์์น์ด๋ ๊น ์๋ฌด๊ฒ๋ ์ํ ๊ฒ
}else{
if (map[i][j] != map[i+1][j]) {
swap(map, i, j, i+1, j);
int len = 1;
for(int a=1; a<n; a++){ // ์ด ๊ณ ์
if(map[a-1][j] == map[a][j]){
len++;
}else{
len=1;
}
ans = Math.max(ans, len);
}
ans = Math.max(ans, len);
swap(map, i, j, i+1, j);
}
}
}else{
if(i == n-1){ // ๋ง์ง๋ง ํ์ ๋์ผ ์ด ๋ค์ ์์ ๋น๊ต x
if(map[i][j] != map[i][j+1]){
swap(map, i, j, i, j+1);
// ๋์ผ ํ ์ต์ฅ๊ธธ์ด ๊ฒ์
int len = 1;
for(int a=1; a<n; a++){ // ํ ๊ณ ์
if(map[i][a-1] == map[i][a]){
len++;
}else{
len=1;
}
ans = Math.max(ans, len);
}
ans = Math.max(ans, len);
//์๋ณต
swap(map, i, j, i, j+1);
}
}else{// ์ด ๊ฒฝ์ฐ๊ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ
if(map[i][j] != map[i][j+1]){
swap(map, i, j, i, j+1);
// ๋์ผ ํ ์ต์ฅ๊ธธ์ด ๊ฒ์
int len = 1;
for(int a=1; a<n; a++){ // ํ ๊ณ ์
if(map[i][a-1] == map[i][a]){
len++;
}else{
len=1;
}
ans = Math.max(ans, len);
}
ans = Math.max(ans, len);
//์๋ณต
swap(map, i, j, i, j+1);
}
if (map[i][j] != map[i+1][j]) {
swap(map, i, j, i+1, j);
int len = 1;
for(int a=1; a<n; a++){ // ์ด ๊ณ ์
if(map[a-1][j] == map[a][j]){
len++;
}else{
len=1;
}
ans = Math.max(ans, len);
}
ans = Math.max(ans, len);
swap(map, i, j, i+1, j);
}
}
}
}
}
System.out.println(ans);
sc.close();
}
static void swap(char[][] map, int ai, int aj, int bi, int bj){
char tmp = map[ai][aj];
map[ai][aj] = map[bi][bj];
map[bi][bj] = tmp;
}
}
์ค๋ต๋ ธํธ(ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์ )
๊ทธ๋ฅ ์งํ ๋ฐฉํฅ์ r+1, c+1๋ก๋ง ์ ํํด์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ค. ๋ฌธ์ ์ ํ ์์ฒด๊ฐ ์์ ํ์์ด๋ ์ด๋ ๊ฒ ํด๋ดค๋๋ฐ ๋ต์ด ์๋์๋ค.. ๋ค์ ํ์ด๋ณด์.
1/6์ผ ์ค๋ ์์ ์ฌํ๊ฒ์ ์ ๋ณตํ์.
์ ๋ต์ฝ๋
import java.io.FileInputStream;
import java.util.Scanner;
class Main{
public static void swapItem(char[][] map, int ia, int ja, int ib, int jb){
char tmp = map[ia][ja];
map[ia][ja] = map[ib][jb];
map[ib][jb] = tmp;
}
public static int findMaxRow(char[][] map, int n){
int tmpMax = 0;
for(int i=0; i<n; i++){
int len = 1;
for(int j=1; j<n; j++){
if(map[i][j-1] == map[i][j]){
len++;
}else{
tmpMax = Math.max(tmpMax, len);
len = 1;
}
}
tmpMax = Math.max(tmpMax, len);
}
return tmpMax;
}
public static int findMaxCol(char[][] map, int n){
int tmpMax = 0;
for(int i=0; i<n; i++){
int len = 1;
for(int j=1; j<n; j++){
if(map[j-1][i] == map[j][i]){
len++;
}else{
tmpMax = Math.max(tmpMax, len);
len = 1;
}
}
tmpMax = Math.max(tmpMax, len);
}
return tmpMax;
}
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char[][] map = new char[n][n];
for(int i=0; i<n; i++){
char[] input = sc.next().toCharArray();
int idx = 0;
for(char k: input){
map[i][idx++] = k;
}
}
int ans = 0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if (j+1 < n && map[i][j] != map[i][j+1]){ // ์์ผ๋ก ๊ตํ
swapItem(map, i,j, i, j+1);
ans = Math.max(ans, Math.max(findMaxRow(map, n), findMaxCol(map,n)));
swapItem(map, i,j, i, j+1);
}
if (i+1 < n && map[i][j] != map[i+1][j]){ // ์๋๋ก ๊ตํ
swapItem(map, i,j, i+1, j);
ans = Math.max(ans, Math.max(findMaxRow(map, n), findMaxCol(map,n)));
swapItem(map, i,j, i+1, j);
}
}
}
System.out.println(ans);
sc.close();
}
}
์ ๋ต์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด์ ํจ์ ์ ๋น ์ก๋๊ฑด ans๋ฅผ ๋ฎ์ด์ฐ๋ ๋ถ๋ถ์ด๋ค.
๋ ํฐ ๊ฐ์ ๊ณ ๋ฅผ ๋ ans์ ์ด์ ๊ฐ๋ ์ ๊ฒฝ์ฐ์ง์์ผ๋ฉด ํ๋ฐฉํฅ ๊ตํํ ๋ ์ด๋ฐฉํฅ ๊ตํ ๊ฒฐ๊ณผ๊ฐ ๋ฌด์๋ผ์ ๋ต์ด ์ ๋๋ก ์๋์จ๋ค. ์์ ํ์์ด์ง๋ง ๋ฐฐ์ด ์ปจํธ๋กค์ ๊ฐ๊น์ ๋ ๋ฌธ์ ๊ฐ๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
๋ฐ์ํ
'OJ๐ผ > ์ค๋ต๋ ธํธ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][JAVA] 2295: ์ธ ์ ์ฐพ๊ธฐ (0) | 2024.01.07 |
---|---|
[BOJ][JAVA] 1920: ์ ์ฐพ๊ธฐ (0) | 2024.01.07 |
[BOJ][JAVA] 10431: ์ค์ธ์ฐ๊ธฐ (0) | 2024.01.04 |
[SWEA][JAVA] 1954. ๋ฌํฝ์ด ์ซ์ (0) | 2023.11.15 |
[SWEA][JAVA] 1970. ์ฌ์ด ๊ฑฐ์ค๋ฆ๋(D2์์ ๋ฐ์ํ ์๊ฐ์ด๊ณผ) (0) | 2023.11.14 |