Skip to content

Commit 7e4974a

Browse files
committed
[Silver IV] Title: 체스판 다시 칠하기, Time: 8 ms, Memory: 69108 KB -BaekjoonHub
1 parent e402ce7 commit 7e4974a

2 files changed

Lines changed: 58 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# [Silver IV] 체스판 다시 칠하기 - 1018
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1018)
4+
5+
### 성능 요약
6+
7+
메모리: 69108 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
브루트포스 알고리즘
12+
13+
### 제출 일자
14+
15+
2025년 2월 1일 09:31:32
16+
17+
### 문제 설명
18+
19+
<p>지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.</p>
20+
21+
<p>체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.</p>
22+
23+
<p>보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.</p>
24+
25+
### 입력
26+
27+
<p>첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.</p>
28+
29+
### 출력
30+
31+
<p>첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.</p>
32+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func solution1018(_ x: Int, _ y: Int, _ firstShouldWhite: Bool) -> Int{
2+
var shouldChagePlaceCount = 0
3+
var flag = board[y][x] == "W" ? true : false
4+
flag = flag == firstShouldWhite
5+
for i in y..<(y+8) {
6+
for j in x..<(x+8) {
7+
let curPlace = board[i][j] == "W" ? true : false
8+
if curPlace != flag {
9+
shouldChagePlaceCount += 1
10+
}
11+
flag.toggle()
12+
}
13+
flag.toggle()
14+
}
15+
return shouldChagePlaceCount
16+
}
17+
let nm = readLine()!.split { $0 == " " }.map { Int(String($0))! }
18+
let board = (0..<nm[0]).map { _ in readLine()!.map { String($0) }}
19+
var answer = Int.max
20+
for i in 0...(nm[0]-8) {
21+
for j in 0...(nm[1]-8) {
22+
answer = min(solution1018(j, i, true), answer)
23+
answer = min(solution1018(j, i, false), answer)
24+
}
25+
}
26+
print(answer)

0 commit comments

Comments
 (0)