์ค๋ ํ๋ฃจ์ข ์ผ ํ๋ ค๊ณ ๋์ ํ๋๋ฐ ์คํจํด์ ๊ฒฐ๊ตญ ๊ตฌ๊ธ๋ง์ ํ๋ค..
์ด ๋ฌธ์ ์์ ์ฃผ์ด์ง N์ ์ต๋๊ฐ์ 3^7 = 2187์ด๋ค.
์ฆ N^2 = 4782969
1์ด์ 2000๋งํ ์ฐ์ฐ๋๋ค๊ณ ํด์
2์ด = 4์ฒ๋งํ์์ ํ๋ฉด๋๋๊น O(N^2)๋ก ํ๋ฉด ๋ ์ค ์์๋๋ฐ .. ๊ณ์ ์๊ฐ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๊ตฌ๊ธ๋ง ์ค ํ์ด์ฌ์ผ๋ก ํผ ์ฝ๋๋ค์ Swift์ธ์ด๋ก ๋ฐ๊ฟ ํ์ด๋ด๋.. ํ์ด์ฌ์์๋ ํ๋ฆฌ์ง๋ง Swift์์๋ ํ๋ฆฌ์ง ์์๋คใ ใ
O(N^2logN), O(NlogN) ๋ฑ๋ฑ ๋ค์ํ ์๊ฐ๋ณต์ก๋๋ก ๊ตฌํํด๋ดค๋๋ฐ ๋ชจ๋ ์คํจํ์๋ค.
import Foundation
let N = Int(readLine()!)!
var matrix = [[Int]]()
for _ in 0..<N {
let line = readLine()!.split(separator: " ").map { Int($0)! }
matrix.append(line)
}
var counts = [0, 0, 0]
func countPaper(_ paper: [[Int]], _ x: Int, _ y: Int, _ size: Int) {
// ํด๋น ๋ถ๋ถ์ด ๋ชจ๋ ๊ฐ์ ์์ธ์ง ํ์ธ
var allSame = true
let first = paper[x][y]
for i in x..<x+size {
for j in y..<y+size {
// ๋ค๋ฅธ ์๊ฐ ์์ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ ํ์ถ
if paper[i][j] != first {
allSame = false
break
}
}
}
if allSame {
// ํด๋น ๋ถ๋ถ์ด ๋ชจ๋ ๊ฐ์ ์์ผ ๊ฒฝ์ฐ, ํด๋น ์์ ํด๋นํ๋ counts๋ฅผ ์ฆ๊ฐ
counts[first + 1] += 1
} else {
// ํด๋น ๋ถ๋ถ์ด ๋ชจ๋ ๊ฐ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ, 9๊ฐ์ ์์ ์ข
์ด๋ก ๋ถํ ํ์ฌ ์ฌ๊ทํธ์ถ
let newSize = size / 3
for i in 0..<3 {
for j in 0..<3 {
countPaper(paper, x + i * newSize, y + j * newSize, newSize)
}
}
}
}
countPaper(matrix, 0, 0, N)
print(counts[0])
print(counts[1])
print(counts[2])
๊ฒฐ๊ตญ ์๋ฒฝํ ๋ฐฉ๋ฒ์ ์๋์ง๋ง ๋ฐ๋ณต๋ฌธ์ ๋๋ ๋์ค ํ์ถํ๊ฒํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ์ด๊ณผ๋ฅผ ๋ฉดํ ์ ์์๋ค.
์๋ฌด๋๋ N^2์์ ๋ฐ๋ณต์ด ๊ฐ์ฅ ๋ง์ด ๋ ๊ฒ ๊ฐ์์ ํ์์๋ ๋ฐ๋ณต์ ํ์ง ์๋๋ก break๋ฅผ ์ถ๊ฐํด์คฌ๋ค.
'๐ ์ฝํ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๋ฐฑ์ค 1541 ์์ด๋ฒ๋ฆฐ ๊ดํธ (0) | 2023.04.04 |
---|---|
[Swift] ๋ฐฑ์ค 1922 ์ฟผ๋ํธ๋ฆฌ (0) | 2023.04.04 |
[Swift] ๋ฐฑ์ค 1676 ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2023.03.30 |
[Swift] ๋ฐฑ์ค1012 ์ ๊ธฐ๋๋ฐฐ์ถ (0) | 2023.03.30 |
[Swift] ๋ฐฑ์ค1260 DFS์ BFS (0) | 2023.03.30 |