MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 1780๋ฒˆ: ์ข…์ด์˜ ๊ฐœ์ˆ˜ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 1780๋ฒˆ: ์ข…์ด์˜ ๊ฐœ์ˆ˜

MUKER 2023. 4. 14. 00:39
 

1780๋ฒˆ: ์ข…์ด์˜ ๊ฐœ์ˆ˜

N×Nํฌ๊ธฐ์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ์ข…์ด๊ฐ€ ์žˆ๋‹ค. ์ข…์ด์˜ ๊ฐ ์นธ์—๋Š” -1, 0, 1 ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ํ–‰๋ ฌ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ํฌ๊ธฐ๋กœ ์ž๋ฅด๋ ค๊ณ  ํ•œ๋‹ค. ๋งŒ์•ฝ ์ข…์ด๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์ˆ˜

www.acmicpc.net


์„ฑ๊ณต ํ’€์ด

let N = Int(readLine()!)!
var arr = [[Int]]()
var cnt = [0,0,0]
for _ in 0..<N {
    arr.append(readLine()!.split(separator: " ").map { Int($0)! })
}

func solution(paperSize: Int, y: Int, x: Int) {
    let point = arr[y][x]
    
    for i in y..<y+paperSize {
        for j in x..<x+paperSize {
            
            if arr[i][j] != point {
                let newSize = paperSize / 3
                
                for k in 0..<3 {
                    for l in 0..<3 {
                        solution(paperSize: newSize, y: y+k*newSize, x: x+l*newSize)
                    }
                }
                return
            }
        }
    }
    cnt[point+1] += 1
}
solution(paperSize: N, y: 0, x: 0)
cnt.forEach { print($0) }

ํ’€์ด ํ‚ค์›Œ๋“œ

๋ถ„ํ• ์ •๋ณต
์ž…๋ ฅ๊ฐ’ N์— 9๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด
9*9 ํฌ๊ธฐ์˜ ์ข…์ด(๋ฐฐ์—ด)๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

์‹œ์ž‘์                 
                 
                 
                 
                 
                 
                 
                 
                 
9*9 ๋ฐฐ์—ด์ด ๋ชจ๋‘ ๊ฐ™์€ ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š” (y, x) ๊ฐ’์„ ์ด์šฉํ•ด
์‹œ์ž‘์ ์˜ ์ˆซ์ž(-1 or 0 or 1)๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ 0.. <9(paperSize)๊นŒ์ง€ ์ด์ค‘ ๋ฐ˜๋ณตํ•˜๋ฉฐ
for i in y..<y+paperSize {
        for j in x..<x+paperSize {
            
            if arr[i][j] != point {

arr [i][j]๊ฐ€ ์‹œ์ž‘์ ์˜ ์ˆซ์ž์ธ์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์‹œ์ž‘์ ๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด
paperSize๋Š” / 3์œผ๋กœ ๋‚˜๋ˆ  newSize๋ฅผ ์ค€๋น„ํ•ด ์ค๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์€ ์ข…์ด๋ฅผ ๊ฐ™์€ ํฌ๊ธฐ๋กœ 9 ๊ฐœ ์ž๋ฅด๊ณ , ๊ฐ๊ฐ ์ž˜๋ฆฐ ์ข…์ด์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด ์ค๋‹ˆ๋‹ค.

๊ฐ™์€ ํฌ๊ธฐ์˜ 9๊ฐœ ์ข…์ด๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด
y์ถ•์„ 0..<3, x์ถ•์„ 0..<3 
์ด์ค‘ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
                let newSize = paperSize / 3
                
                for k in 0..<3 {
                    for l in 0..<3 {
                        solution(paperSize: newSize, y: y+k*newSize, x: x+l*newSize)
                    }
                }

 

์ƒˆ๋กœ์šด solutionํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ newSize๋Š” 3
k์™€ l์„ newSize์— ๊ณฑํ•ด y์™€ x์˜ ์‹œ์ž‘์ ์„ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ค๋‹ˆ๋‹ค.

์‹œ์ž‘์ ์ด ๋‹ค๋ฅผ ๋•Œ๋Š” ์ƒ์œ„ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ๊ผญ return ์‹œ์ผœ์ค๋‹ˆ๋‹ค.
๊ฒ€์‚ฌ ๋ฒ”์œ„์—์„œ ์‹œ์ž‘์ ๊ณผ ๋ชจ๋“  ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด
cnt ๋ฐฐ์—ด์˜ ์•Œ๋งž์€ ponit๋ฅผ 1 ๋” ํ•ด์ค๋‹ˆ๋‹ค.

		return
            }
        }
    }
    cnt[point+1] += 1