[완전 탐색] 백준 실버4 1018번: 체스판 다시 칠하기(Swift)

2023. 7. 13. 17:17·코테

 

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

풀이과정

위 문제는 검정색(B)과 흰색(W)이 무작위로 색칠되어 있는 체스판을 8x8로 잘라 올바르게 다시 색을 칠할 때 칠해야 하는 정사각형의 최소 개수를 출력하는 문제이다.

위 조건에 올바른 체스판의 경우는 두 가지이다.

왼쪽 상단이 W로 시작하는 체스판과

B로 시작하는 체스판이다.

두 올바른 체스판과 임의로 잘라낸 8x8의 체스판과 비교하여 색이 다른 정사각형의 수를 찾으면 된다.

let board1: [[Character]] = [["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"]]

let board2: [[Character]] = [["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"]]

위처럼 올바른 두 체스판을 이중 배열을 통해 만들어준다.

이후 탐색을 통해 8x8 체스판을 결정하고, 위 board와 비교하여 최솟값을 찾아 result에 저장한다.

최종코드
let nm = readLine()!.split(separator: " ").map { Int($0)! }

let n = nm[0]
let m = nm[1]

let board1: [[Character]] = [["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"]]

let board2: [[Character]] = [["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"],
                             ["B","W","B","W","B","W","B","W"],
                             ["W","B","W","B","W","B","W","B"]]


var chessboard = [[Character]]()

for _ in 0..<n {
  let y = readLine()!
  chessboard.append(Array(y))
}

var result = Int.max

for y in 0...(n - 8)  {
  for x in 0...(m - 8) {
    var count1 = 0, count2 = 0
    for i in y..<(y + 8) {
      for j in x..<(x + 8) {
        if chessboard[i][j] != board1[i - y][j - x] {
          count1 += 1
        }
        if chessboard[i][j] != board2[i - y][j - x] {
          count2 += 1
        }
      }
    }
    result = min(result, count1, count2)
  }
}

print(result)

 

저작자표시 (새창열림)

'코테' 카테고리의 다른 글

[다이나믹 프로그래밍] 백준 실버1 1149번: RGB거리  (0) 2023.09.07
[구현] 백준 실버3 2503번: 숫자 야구(Swift)  (0) 2023.07.08
[구현 + BFS] 백준 골드3 16236번: 아기 상어(Swift)  (0) 2023.06.22
[구현 + 재귀] 백준 골드5 14891번: 톱니바퀴(Swift)  (0) 2023.06.22
[백트래킹 + 구현] 백준 실버1 14888번: 연산자 끼워넣기(Swift)  (0) 2023.06.09
'코테' 카테고리의 다른 글
  • [다이나믹 프로그래밍] 백준 실버1 1149번: RGB거리
  • [구현] 백준 실버3 2503번: 숫자 야구(Swift)
  • [구현 + BFS] 백준 골드3 16236번: 아기 상어(Swift)
  • [구현 + 재귀] 백준 골드5 14891번: 톱니바퀴(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    코테
    네부캠
    Race Condition
    백준
    비동기
    챌린지
    회고
    노드
    알고리즘
    구현
    BFS
    Property wrapper
    동시성
    다이나믹 프로그래밍
    실버
    코딩테스트
    완전탐색
    이분탐색
    재귀
    브루트포스 알고리즘
    ios
    photos
    탐색
    GCD
    dfs
    그리디
    Combine
    Swift
    PhotoKit
    photoUI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[완전 탐색] 백준 실버4 1018번: 체스판 다시 칠하기(Swift)
상단으로

티스토리툴바