티스토리 뷰
1. 행검사
열검사 할때, 배열 범위를 벗어나지않게 주의하기
if(candy[i][j]== candy[i][j+1]) {
cnt++;
}이 코드때문에
for(int j=0;j<n-1;j++)
j가 n-1전까지
2.
for(int i=0;i<n;i++) {
int cnt = 1; // 이거 초기화 꼭 해주기!!
for(int j=0;j<n-1;j++) { //배열 범위 벗어나지않게 주의
if(candy[i][j]== candy[i][j+1]) {
cnt++;
}
else {
cnt =1;
}
if(maxCount <cnt) {
maxCount =cnt; //cnt1값 저장
}
}
}
3. 문자열 CCP를 차례로 배열에 저장하고 싶다
1) 일단 Stirng str = sc.next(); 입력받고
2) str.charAt(j); 문자열의 각 인덱스에 접근하고 해당위치에 있는 문자를 반환한다
4. 가로방향/ 세로방향
인접한 사탕 교한한다 (tmp 사용 ) -> 최대 캔디 개수 구한다 -> 다시 복원시킨다.
5.
for(int i=0;i<n;i++) {
for(int j=0;j<n-1;j++) {
if(candy[j][i] != candy[j+1][i]) { // 이렇게 쓴 이유는 [i][j]라고 쓰나 [j][i]라고 쓰나 상관없지만 배열 순서를 고려하면 [j][i]로 쓰는게 더 적절함
char tmp = candy[j][i];
candy[j][i] = candy[j+1][i];
candy[j+1][i]= tmp;
maxCandy2 = Math.max(maxCandy2, findCandy(candy, n));
tmp = candy[j][i];
candy[j][i] = candy[j+1][i];
candy[j+1][i]= tmp;
}
}
}
package boj;
import java.util.Scanner;
public class BOJ_3085 {
// 인접한 서로 다른 사탕 2개 고르기
// 두개 위치바꾸기
// 행검사 인접한 행이 같은 사탕일경우 최대길이
// 열검사
//3
//CCP
//CCP
//PPC
public static int findCandy(char [][]candy, int n) {
int maxCount = 0;
//행 검사
for(int i=0;i<n;i++) {
int cnt = 1;
for(int j=0;j<n-1;j++) { //배열 범위 벗어나지않게 주의
if(candy[i][j]== candy[i][j+1]) {
cnt++;
}
else {
cnt =1;
}
if(maxCount <cnt) {
maxCount =cnt; //cnt1값 저장
}
}
}
//열 검사
for(int i=0;i<n;i++) {
int cnt = 1;
for(int j=0;j<n-1;j++) {
if(candy[j][i]== candy[j+1][i]) {
cnt++;
}
else {
cnt =1;
}
if(maxCount<cnt) {
maxCount =cnt; // 순서 헷갈리면 노노
}
}
}
return maxCount;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char candy[][] = new char [n][n];
for(int i=0;i<n;i++) {
String row = sc.next();//CCP 입력받고
for(int j=0;j<n;j++) {
candy[i][j] = row.charAt(j); // 문자열 row의 각 인덱스에 접근하고 해당 위치에 있는 문자를 반환 // C // C // P 반환
}
}
int maxCandy1 = 0;
int maxCandy2 = 0;
// 가로 방향으로 인접한 사탕 교환하기
for(int i=0;i<n;i++) {
for(int j=0;j<n-1;j++) {
if(candy[i][j] != candy[i][j+1]) {
char tmp = candy[i][j];
candy[i][j] = candy[i][j+1];
candy[i][j+1]= tmp;
maxCandy1 = Math.max(maxCandy1,findCandy(candy, n));
tmp = candy[i][j];
candy[i][j] = candy[i][j+1];
candy[i][j+1]= tmp;
}
}
}
// 세로 방향으로 인접한 사탕 교환하기
for(int i=0;i<n;i++) {
for(int j=0;j<n-1;j++) {
if(candy[j][i] != candy[j+1][i]) {
char tmp = candy[j][i];
candy[j][i] = candy[j+1][i];
candy[j+1][i]= tmp;
maxCandy2 = Math.max(maxCandy2, findCandy(candy, n));
tmp = candy[j][i];
candy[j][i] = candy[j+1][i];
candy[j+1][i]= tmp;
}
}
}
if(maxCandy1 >= maxCandy2) {
System.out.println( maxCandy1);
}
else {
System.out.println( maxCandy2);
}
}
}