[JAVA]伯準1018-チェス盤の塗り直し
11824 ワード
白駿1018
問題を理解する
私はN×Mの正方形に碁盤8×8を作ります.チェス盤には白黒のペンキが必要だ.N×M→8×8作成の場合、最も塗り色の少ないマス数だけでOKです.
問題を解く BufferedReader, を入力 ans(正解)を64に初期化(8 x 8なので最大塗り可能なセル数は64です.実は32ですが、まず64に初期化) グリッドを移動するたびに、8 x 8を参照します. でナビゲートすると、列+行は偶数W、奇数Bに固定されます. の字形で着色した場合、Wの列+挙動が偶数であれば、Bの列+挙動が奇数となる. 偶数面W、奇数面Bを固定して塗り直すマス数をペンキといいます.
では、偶数B、奇数Wで塗りたいマス数を固定するのは64-partyです. 最小限のペンキ価格を求めて答えを探します.
コード#コード#
問題を理解する
私はN×Mの正方形に碁盤8×8を作ります.チェス盤には白黒のペンキが必要だ.N×M→8×8作成の場合、最も塗り色の少ないマス数だけでOKです.
問題を解く
では、偶数B、奇数Wで塗りたいマス数を固定するのは64-partyです.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
//입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringTokenizer st = new StringTokenizer(s);
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
char[][] square = new char[N][M];
for(int i=0;i<N;i++) {
square[i] = br.readLine().toCharArray();
}
//정답 구하기
int ans = 64;
for(int i = 0; i <= N - 8; i++) {
for(int j = 0; j <= M-8; j++) {
//해당i,j부터 8*8 탐색
int paint=0; //칠해야할 칸 수 -> 짝수 W, 홀수 B로 고정하고 계산
for(int n=0;n<8;n++) {
for(int m=0;m<8;m++) {
if((n+m)%2==0) {
if(square[i+n][j+m]!='W') paint++;
}else {
if(square[i+n][j+m]!='B') paint++;
}
}
}
paint = paint<32 ? paint : 64-paint; //칠해야할 칸 수는 paint 또는 64-paint
ans = ans<paint ? ans : paint;
}
}
System.out.println(ans);
br.close();
}
}
Reference
この問題について([JAVA]伯準1018-チェス盤の塗り直し), 我々は、より多くの情報をここで見つけました https://velog.io/@h3707/JAVA-백준-1018-체스판-다시-칠하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol