배열의 복사
배열의 복사
// 얕은 복사
String[][] tempBoard = board;
// 깊은 복사
String[][] tempBoard = new String[N][M];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
tempBoard[i][j] = board[i][j];
}
}
-
배열을 복사하기 위해 단순히 다음과 같이 복사한다면, tempBoard에 board의 참조값이 대입되므로, tempBoard의 배열 방의 값을 변경한다면 board 역시 바뀌게 된다.
-
두 번째 방법으로 해야 서로 다른 배열 객체가 된다.
백준 1018번 체스판 다시 칠하기.
-
8 * 8 체스판을 규칙에 맞게 바꾸고, 회수를 세는 메소드를 만든다.
-
규격이 큰 체스판에서 모든 경우에 1의 메소드를 호출하여 검사할 수 있도록 반복문을 작성한다.
-
카운트가 가장 작은 경우를 출력한다.(최솟값)
import java.io.*;
class Main1018 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] caseStr = br.readLine().split(" ");
int N = Integer.parseInt(caseStr[0]);
int M = Integer.parseInt(caseStr[1]);
String[][] board = new String[N][M];
for(int i=0; i<N; i++){ // 주어진 예시를 이차원 배열에 입력한다.
String line = br.readLine();
for(int j=0; j<M; j++){
board[i][j] = line.substring(j,j+1);
}
}
// 모든 경우를 검사하고 최소로 변경된 값을 출력한다.
int answer = 9999;
for(int i=0; i< N-7; i++){
for(int j=0; j< M-7; j++){
int temp = checkBoard(board, i, j, N, M);
if(temp < answer) answer = temp;
}
}
System.out.println(answer);
}
// 8*8을 검사하는 메소드 필요
static int checkBoard(String[][] board, int startI, int startJ, int N, int M){
int endI = startI + 8;
int endJ = startJ + 8;
int count = 0;
// tempBoard = board 로 정의하면 안된다... 참조값을 대입하므로 같은 객체가 되어버림.
String[][] tempBoard = new String[N][M];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
tempBoard[i][j] = board[i][j];
}
}
for(int i= startI; i< endI; i++){
for(int j= startJ; j< endJ; j++){
if(j == (endJ - 1)) break;
if(tempBoard[i][j+1].equals(tempBoard[i][j])){
if(tempBoard[i][j].equals("B")) tempBoard[i][j+1] = "W";
else tempBoard[i][j+1] = "B";
count++;
}
}
if(i==(endI - 1)) break;
if(tempBoard[i+1][startJ].equals(tempBoard[i][startJ])){
if(tempBoard[i][startJ].equals("B")) tempBoard[i+1][startJ] = "W";
else tempBoard[i+1][startJ] = "B";
count++;
}
}
// 첫번째 칸의 색깔을 바꾸어 칠하는 경우 == (64-count)
count = Math.min(count, 64 - count);
return count;
}
}
Author And Source
이 문제에 관하여(배열의 복사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@betweenhj702/배열의-복사저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)