백준 - 1018번 (Swift)

이창형·2023년 5월 31일
0

https://www.acmicpc.net/problem/1018
문제 링크!

코드

let nums = readLine()!.split(separator: " ").map{Int($0)!}
let row = nums[0]
let col = nums[1]
var grid = [[Character]]()
var answer = 64
// 화이트로 체스판 시작
var wGrid = [[Character]]()
// 블랙으로 체스판 시작
var bGrid = [[Character]]()

for _ in 0..<row {
    let a = readLine()!
    var arr = [Character]()
    for i in a {
        arr.append(i)
    }
    grid.append(arr)
}

// 입력받은 행과 열의 갯수 만큼 W,B로 채워줌
for i in 1...row {
    var wArr = [Character]()
    var bArr = [Character]()
    for j in 1...col {
        if i % 2 != 0 {
            if j % 2 != 0 {
                wArr.append("W")
                bArr.append("B")
            } else {
                wArr.append("B")
                bArr.append("W")
            }
        } else {
            if j % 2 != 0 {
                wArr.append("B")
                bArr.append("W")
            } else {
                wArr.append("W")
                bArr.append("B")
            }
        }
    }
    wGrid.append(wArr)
    bGrid.append(bArr)
}

// 시작점을 옮기면서 가장 적은 갯수 count
for i in 0..<row {
    if i + 8 > row {
        break
    }
    for j in 0..<col {
        var count = 0
        var count2 = 0
        if j + 8 > col {
            break
        }
        for k in i..<i+8 {
            for l in j..<j+8 {
                if wGrid[k][l] != grid[k][l] {
                    count += 1
                }

                if bGrid[k][l] != grid[k][l] {
                    count2 += 1
                }
            }
        }
        if count > count2 {
            if answer > count2 {
                answer = count2
            }
        } else {
            if answer > count {
                answer = count
            }
        }
    }
}

print(answer)

회고

  • 효율적인 코드인지는 모르겠다
  • 풀려서 좋다
  • 성장한 것 같다
profile
iOS Developer

0개의 댓글