โจ ๋ธ๋ฃจํธํฌ์ค โ ์์ ํ์
https://www.acmicpc.net/problem/1018
1018๋ฒ: ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. N๊ณผ M์ 8๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋ณด๋์ ๊ฐ ํ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. B๋ ๊ฒ์์์ด๋ฉฐ, W๋ ํฐ์์ด๋ค.
www.acmicpc.net
๐ ๊ณ ๋ คํด์ผํ ์
- ์ฃผ์ด์ง ์ฒด์คํ์ 8x8 ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ํฐ์๊ณผ ๊ฒ์์์ด ๋ฒ๊ฐ์์ ์น ํด์ ธ์์ด์ผ ํ๋ค.
- (0, 0)์ด ๊ฒ์์์ธ ๊ฒฝ์ฐ์ ํฐ์์ธ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด์ ๊ตฌํ๋ค.
- ๊ฐ๋ก, ์ธ๋ก ์ธ๋ฑ์ค ๊ฐ์ ํฉ์ด ์ง์, ํ์์ ๋ฐ๋ผ ํฐ์์ธ์ง ๊ฒ์์์ธ์ง ๊ตฌ๋ถํด์ ๊ตฌํ๋ค.
๐น๏ธ ํ์ด ๊ณผ์
1๏ธโฃ ์ฃผ์ด์ง ์ฒด์คํ์ 8x8 ํฌ๊ธฐ๋ก ๋ค์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ copy๋ฐฐ์ด์ ์์ฑํ๋ค.
2๏ธโฃ (0, 0)์ด ํฐ์์ด์์ ๋, i+j (์ธ๋ก, ๊ฐ๋ก ์ธ๋ฑ์ค)์ ๊ฐ์ด ์ง์๋ผ๋ฉด ํด๋นํ๋ ์นธ์ ํฐ์์ด์ด์ผ ํ๋ค. i+j์ ๊ฐ์ด ํ์๋ผ๋ฉด ํด๋นํ๋ ์นธ์ ๊ฒ์์์ด์ด์ผ ํ๋ค.
3๏ธโฃ (0, 0)์ด ๊ฒ์์์ด์์ ๋๋ 2๋ฒ์์ ๋ฐ๋๋ก ์๊ฐํด์ฃผ๋ฉด ๋๋ค.
4๏ธโฃ ๊ฐ๋ก, ์ธ๋ก ์ธ๋ฑ์ค ํฉ์ ํ์ง ์กฐ๊ฑด๋ฌธ์ ๋ฐ๋ผ cnt ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
5๏ธโฃ cnt ๊ฐ์ ์ด๊ธฐํํด์ฃผ๋ฉด์ (0, 0)์ด ๊ฒ์์์ผ ๋์ ํฐ์์ผ ๋ ๋ชจ๋ ๊ตฌํ ํ min์ ๊ฐ์ ๊ฐฑ์ ํ๋ค.
๐ฉ๐ป ์ ์ฒด ์ฝ๋
public class BOJ_1018_์ฒด์คํ๋ค์์น ํ๊ธฐ {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
char[][] board = new char[N][M];
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < M; j++) {
board[i][j] = str.charAt(j);
}
}
char[][] copy = new char[8][8];
int min = Integer.MAX_VALUE;
int cnt=0;
// 8*8 ํฌ๊ธฐ ์ฒด์คํ
for (int l = 0; l <= N - 8; l++) {
for (int k = 0; k <= M - 8; k++){
for (int i = l; i < 8 + l; i++) {
for (int j = k; j < 8+k; j++) {
copy[i-l][j-k] = board[i][j];
}
}
cnt=0;
// (0, 0) ์ด ํ์์์ด๋ผ๋ฉด
for (int m = 0; m < 8; m++) {
for (int n = 0; n < 8; n++) {
if (((m + n) % 2 == 0) && copy[m][n] !='W') cnt++;
else if(((m+n)%2!=0 && copy[m][n]!='B')) cnt++;
}
}
min = Math.min(min, cnt);
cnt=0;
// (0, 0)์ด ๊ฒ์์์ด๋ผ๋ฉด
for (int m = 0; m < 8; m++) {
for (int n = 0; n < 8; n++) {
if (((m + n) % 2 == 0) && copy[m][n] !='B') cnt++;
else if(((m+n)%2!=0 && copy[m][n]!='W')) cnt++;
}
}
min = Math.min(min, cnt);
}
}
System.out.println(min);
}
}
'์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 20058 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ - Java (0) | 2024.03.01 |
---|---|
[BOJ] 21609 ์์ด ์คํ๊ต - Java (0) | 2024.02.26 |
[BOJ] 1504 ํน์ ํ ์ต๋จ ๊ฒฝ๋ก - Java (0) | 2023.12.05 |
[BOJ] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ - Java (0) | 2023.12.04 |
[BOJ] 4179 ๋ถ! - Java (1) | 2023.10.25 |