Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- greedy
- dynamic programming
- Git
- two pointers
- 깃
- 컴퓨터과학과
- 방통대
- 투포인터
- 그리디
- 코딩
- it
- 알고리즘
- 자바
- javascript
- 자바스크립트
- algorithm
- Binary Search
- 코테
- 방송통신대학교
- 탐욕알고리즘
- 백준
- java
- 이진탐색
- 리트코드
- 완전탐색
- 방송대
- DP
- boj
- sliding window
- LeetCode
Archives
- Today
- Total
개발이 취미인 주니어 기획자
[완전탐색][Java][BOJ] #1018. 체스판 다시 칠하기 본문
728x90
반응형
#완전탐색 #Silver4
https://www.acmicpc.net/problem/1018
🌷 문제 설명
✏️ 백준 연습문제: #2470. 두 용액
지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.
⌨️ 입력
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
🖨️ 출력
첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.
입출력 예
| 입력 | 출력 |
| 8 8 WBWBWBWB BWBWBWBW WBWBWBWB BWBBBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW |
1 |
| 10 13 BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB WWWWWWWWWWBWB WWWWWWWWWWBWB |
12 |
| 8 8 BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW WBWBWBWB |
0 |
| 9 23 BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBW |
31 |
| 10 10 BBBBBBBBBB BBWBWBWBWB BWBWBWBWBB BBWBWBWBWB BWBWBWBWBB BBWBWBWBWB BWBWBWBWBB BBWBWBWBWB BWBWBWBWBB BBBBBBBBBB |
0 |
| 8 8 WBWBWBWB BWBWBWBW WBWBWBWB BWBBBWBW WBWBWBWB BWBWBWBW WBWBWWWB BWBWBWBW |
2 |
| 11 12 BWWBWWBWWBWW BWWBWBBWWBWW WBWWBWBBWWBW BWWBWBBWWBWW WBWWBWBBWWBW BWWBWBBWWBWW WBWWBWBBWWBW BWWBWBWWWBWW WBWWBWBBWWBW BWWBWBBWWBWW WBWWBWBBWWBW |
15 |
💡 해결 포인트
1. 8*8 체스판 범위 설정하기
- 최소 8*8이니까 범위는 N-8
2. 체스판 배열의 규칙
- 체스판은 W-B-W-B... 또는 B-W-B-W... 순서로 반복됨!
- (i + j) % 2 == 0이면
- W 시작 체스판에서는 W
- B 시작 체스판에서는 B가 와야 함
- 이걸 ㅠ 모르고 ㅠ 자꾸 dx dy로 풀려 하니까 답도 안나왔다
- 이런건 어떻게 생각해내?ㅠㅠㅠㅠㅠ
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
char expectedW = ((i + j) % 2 == 0) ? 'W' : 'B'; // 이 부분을 못생각해냄 멍청아
char expectedB = ((i + j) % 2 == 0) ? 'B' : 'W';
if (graph[n + i][m + j] != expectedW) {
w++;
}
if (graph[n + i][m + j] != expectedB) {
b++;
}
}
}
🌷 내 코드
1. 완전탐색
import java.util.*;
import java.io.*;
public class BOJ_1018 {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("example.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N, M 입력
String[] firstLine = br.readLine().split(" ");
int N = Integer.parseInt(firstLine[0]);
int M = Integer.parseInt(firstLine[1]);
// 그래프 입력받기
char[][] graph = new char[N][M];
for (int i = 0; i < N; i++) {
graph[i] = br.readLine().toCharArray();
}
// 최소 색칠 횟수 찾기
int minPaint = 50*50; // 최대값으로 초기화
for (int n = 0; n <= N - 8; n++) { // 8*8 초과하면 안됨
for (int m = 0; m <= M - 8; m++) {
int w = 0; // W로 시작하는 체스판에서 색칠할 횟수
int b = 0; // B로 시작하는 체스판에서 색칠할 횟수
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
char expectedW = ((i + j) % 2 == 0) ? 'W' : 'B'; // 이 부분을 못생각해냄 멍청아
char expectedB = ((i + j) % 2 == 0) ? 'B' : 'W';
if (graph[n + i][m + j] != expectedW) {
w++;
}
if (graph[n + i][m + j] != expectedB) {
b++;
}
}
}
minPaint = Math.min(minPaint, Math.min(w, b)); // 제일 작은 숫자로 갱신
}
}
System.out.println(minPaint);
}
}
🌷 코멘트
실버 4따리에서부터 벽을 느끼는 알고병신
뭔가 문제에 규칙이 있으면 거기서부터 해법을 생각을 해내란 말이야!!!!
2차원배열이라고 하고 상하좌우 체크하는거라 하니까 생각도 안하고 냅다 dx dy 해서ㅋㅋㅋ 지금생각하니 멀 하겠단건지
아 아아악
블로그 내용에 문제가 있다면 댓글 혹은 아래로 연락주세요!
~대가리 꽃밭인 디지털 노마드가 꿈이예요~
🧚♀️ Gyumin Lee
📧 gyumin.q.lee@gmail.com
qminlee723 - Overview
noob. qminlee723 has 8 repositories available. Follow their code on GitHub.
github.com
728x90
반응형
'문제 풀이 > 알고리즘 문제 풀이' 카테고리의 다른 글
| [DFS/백트래킹][Java][BOJ] #2529. 부등호 (1) | 2025.02.05 |
|---|---|
| [완전탐색][Java][BOJ] #1051. 숫자 정사각형 (1) | 2025.02.05 |
| [BFS][Java][BOJ] #1707. 이분 그래프 (0) | 2025.01.24 |
| [DFS][Java][DFS] # 2667. 단지번호붙이기 (1) | 2025.01.23 |
| [BFS][Java][BOJ] #1697. 숨바꼭질 (0) | 2025.01.22 |