๋ฐ์ํ
import Foundation
let N = Int(readLine()!)!
var board = [[Int]]()
var counts = [0, 0]
for _ in 0..<N {
let numArr = readLine()!.components(separatedBy: " ").map { Int($0)! }
board.append(numArr)
}
// ๋ชจ๋ ์์๊ฐ ๋๊ฐ์์ง ์ฒดํฌ
func check(x: Int, y: Int, n: Int) -> Bool {
for i in x..<x+n {
for j in y..<y+n {
if board[x][y] != board[i][j] {
return false
}
}
}
return true
}
// ์์ข
์ด ์๋ฅด๋ ํจ์
func cut(x: Int, y:Int, n: Int) {
if check(x: x, y: y, n: n) {
counts[board[x][y]] += 1
return
} else {
let w = n / 2 // ์๋ฆฐ ์กฐ๊ฐ์ ์ํ ๊ฐ์ค์น
// 4์กฐ๊ฐ์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ (0..<2) (0..<2) ์ด์ค๋ฐ๋ณต๋๋ฆผ
for i in 0..<2 {
for j in 0..<2{
cut(x: x+i*w, y: y+j*w, n: w)
}
}
}
}
cut(x: 0, y: 0, n: N)
print(counts[0])
print(counts[1])
2์ฐจ์ ๋ฐฐ์ด์ n์กฐ๊ฐ ๋ด๋ ๋ฌธ์ ์ ํ
2์ฐจ์ ๋ฐฐ์ด์ n์กฐ๊ฐ ๋ด๋ ๋ฌธ์ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ํผ๋ค.
1. 2์ฐจ์ ๋ฐฐ์ด์ ์ผ์ชฝ ์๋ฅผ ๊ธฐ์ค์ผ๋ก, x, y์ขํ์ 2์ฐจ์๋ฐฐ์ด์ ํฌ๊ธฐ n์ ์ ๋ ฅ๋ฐ์ ๋ชจ๋ ์์๊ฐ ๋๊ฐ์์ง ์ฒดํฌํด์ฃผ๋ ํจ์๋ฅผ ๋ง๋ ๋ค.
2. n์กฐ๊ฐ ๋ด๋ ์ฌ๊ทํจ์๋ฅผ ๋ง๋ ๋ค.
- ๋ชจ๋ ์์๊ฐ ๋๊ฐ์ ๊ฒฝ์ฐ ๊ฐ์ ๋ฆฌํดํ๋ ์ข ๋ฃ์กฐ๊ฑด์ ๋ง๋ ๋ค.
- ์ข ๋ฃ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ, n์กฐ๊ฐ์ผ๋ก ์๋ฅด๊ธฐ ์ํด ๊ฐ์ค์น w๋ฅผ ์ค์ ํ๋ค. (w = N / n)
- ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก n์กฐ๊ฐ ๊ฐ์๋งํผ ์ฌ๊ทํจ์๋ฅผ ํธ์ถํ๋ค. (ex : 4์กฐ๊ฐ -> (0..<2)(0..<2), 9์กฐ๊ฐ -> (0..<3)(0..<3))
๋ฐ์ํ
'๐ ์ฝํ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 1074 Z (0) | 2023.04.11 |
---|---|
[Swift] ๋ฐฑ์ค2630 ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ (0) | 2023.04.11 |
[Swift] ๋ฐฑ์ค 1541 ์์ด๋ฒ๋ฆฐ ๊ดํธ (0) | 2023.04.04 |
[Swift] ๋ฐฑ์ค 1922 ์ฟผ๋ํธ๋ฆฌ (0) | 2023.04.04 |
[Swift] ๋ฐฑ์ค 1780 ์ข ์ด์ ๊ฐ์ (0) | 2023.04.04 |