๐Ÿ“ ์ฝ”ํ…Œ/์œ ํ˜•์ •๋ฆฌ

[๋ถ„ํ• ์ •๋ณต] 2์ฐจ์›๋ฐฐ์—ด์„ n์กฐ๊ฐ ๋‚ด๋Š” ๋ฌธ์ œ์œ ํ˜•

JerryiOS 2023. 4. 11. 03:03

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))

 

์˜ˆ์‹œ์ฝ”๋“œ

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])

 

๋ฐ˜์‘ํ˜•