반응형
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
String[] candyColor;
int n = 0;
int max = 0;
public void solution() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
for(int i = 0; i<n; i++){
sb.append(br.readLine());
}
candyColor = sb.toString().split("");
max = game();
for(int i = 0; i<n*n; i+=n){
for(int j = 0; j<n-1; j++){
swap(i + j, i + j + 1);
int checkCandy = game();
if (checkCandy > max) {
max = checkCandy;
}
swap(i + j, i + j + 1);
}
}
for(int i = 0; i<n; i++){
for(int j = 0; j+i+n<n*n; j+=n) {
swap(i+j, i+j+n);
int checkCandy = game();
if(checkCandy > max){
max = checkCandy;
}
swap(i+j, i+j+n);
}
}
System.out.println(max);
}
public void swap(int a, int b){
String temp = candyColor[a];
candyColor[a] = candyColor[b];
candyColor[b] = temp;
}
public int game(){
int result = 0;
int countX = 0;
int countY = 0;
for(int i = 0; i <n*n; i+=n){
countX = 0;
for(int j = 0; j<n-1; j++) {
if (candyColor[i+j].equals(candyColor[i+j+1])) {
countX++;
if(countX>result) result = countX;
}else{
countX = 0;
}
}
}
for(int i = 0; i<n; i++){
countY = 0;
for(int j = 0; j+i+n<n*n; j+=n) {
if (candyColor[i+j].equals(candyColor[i+j+n])) {
countY++;
if(countY>result) result = countY;
}else{
countY = 0;
}
}
}
return result+1;
}
public static void main(String args[]) throws IOException {
new Main().solution();
}
}
문제 없다고 생각했는데 자꾸 통과가 되지 않았다. 이유는 배열을 다시 되돌리는 과정에서 되돌리는 부분이 if문 안에 들어가서 다시 못되돌리고 있었는데... 그걸 못찾았다... 2차원 배열로 풀었어야 되나 싶지만, 표기만 다를 뿐 컴퓨터가 읽는 동작은 동일하기 때문에 따로 2채원 배열로 만들진 않았다.
풀이 결론
먼저 n*n의 사탕 게임의 가로와 세로를 각각 계산해 이어져 있는 가장 큰 수를 리턴하는 함수를 만들어 놓는다.
비슷한 로직으로 가로 먼저 각각 인덱스를 교환해주고, 만들어 놓은 함수를 호출해 숫자를 리턴한다. 그 후 다시 인덱스를 원래대로 교환해준다. 가로가 끝났다면 다시 세로를 반복해주고, 이 모든 과정에서 나온 가장 큰수를 출력한다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
백준 1748번 : 수 이어쓰기1 (0) | 2023.01.01 |
---|---|
백준 1476번 : 날짜 계산 (0) | 2022.12.29 |
백준 2309번 : 일곱 난쟁이 (0) | 2022.12.28 |
백준 6588번 : 골드바흐의 추측 (0) | 2022.12.28 |
백준 1929번 : 소수 구하기 (0) | 2022.12.28 |