#1018 체스판 다시 칠하기
문제 정리
풀이
import Foundation
// 정답 체스판 경우의 수
var correctBoard1: [[Character]] = []
var correctBoard2: [[Character]] = []
for _ in 0..<4 {
correctBoard1.append(["B","W","B","W","B","W","B","W"])
correctBoard1.append(["W","B","W","B","W","B","W","B"])
correctBoard2.append(["W","B","W","B","W","B","W","B"])
correctBoard2.append(["B","W","B","W","B","W","B","W"])
}
let nm = readLine()!.split(separator: " ").map { Int($0)! }
var board: [[Character]] = []
var output = 32
// 보드 입력 받기
for _ in 0..<nm[0] {
let input = readLine()!.map { $0 }
board.append(input)
}
// i, j는 8x8의 시작지점 // k, l은 시작지점부터 8칸
for i in 0...(nm[0] - 8) {
for j in 0...(nm[1] - 8) {
var drawCount1 = 0
var drawCount2 = 0
// 8x8씩 검사
for k in i..<(i + 8) {
for l in j..<(j + 8) {
if board[k][l] == correctBoard1[k-i][l-j] {
drawCount1 += 1
}
if board[k][l] == correctBoard2[k-i][l-j] {
drawCount2 += 1
}
}
}
output = min(output, (drawCount1 < drawCount2 ? drawCount1 : drawCount2))
}
}
// 정답 출력
print(output)
- W 부터 시작하는 경우와 B 부터 시작하는 경우의 정답 체스판을 만듬
- 반복문으로 8x8 씩 검사하여 각 경우에 대해 다시 그려야하는 갯수를 구함
- 둘 중 더 작은 값이 적게 칠하는 횟수가 됨
풀고나서 알게된 것
처음에 String 배열로 만들어서 한 행씩 비교하는 방법으로 접근했는데, Swift에선 문자열 subscript가 안된다는 걸 이번에 확실하게 알게 되었다ㅜ
let str = "Hello World!"
print(str[1]) // Error
let str = "Hello World!"
print(str[str.index(str.startIndex, offsetBy: 1)]) // e
처음 접근한 방식의 코드가 길어지다보니 공들인 시간이 아까워서 Character 형의 2차원배열로 접근한다는 생각을 못했던 것 같다.
알고리즘 문제를 풀때도 성격이 나타난다.. 고집을 버리자 !
'알고리즘' 카테고리의 다른 글
[프로그래머스] PRG-JadenCase 문자열 만들기 (0) | 2022.09.19 |
---|---|
[백준 BOJ] BOJ -2309 일곱 난쟁이 (0) | 2022.09.18 |
[백준 BOJ] BOJ-8393 합 (0) | 2022.09.18 |
[백준 BOJ] BOJ-7568 덩치 (0) | 2022.09.18 |
[백준 BOJ] BOJ-1920 수 찾기 (0) | 2022.09.18 |