Dev.YoungKyu
YoungKyu's Devlog
전체 방문자
오늘
어제
  • 분류 전체보기
    • 부스트캠프
    • visionOS
    • iOS
    • 알고리즘
    • CS
    • Git
    • Python
    • 끄적끄적

블로그 메뉴

  • 홈
  • 🌝 티스토리 홈
  • ⭐️ 깃허브
  • 태그

공지사항

인기 글

최근 댓글

최근 글

태그

  • Swift5.7
  • CS
  • 부스트캠프
  • 소프트웨어 공학
  • if let
  • Python
  • 알고리즘
  • 티스토리챌린지
  • 백준
  • MVC
  • AVAudioSession
  • avaudiosessionportdescription
  • 모듈화
  • Optional
  • Animation
  • constraint
  • guard
  • boj
  • 소프트웨어 테스트
  • image
  • ImageResource
  • 오블완
  • Concurrency
  • 소프트웨어공학
  • Git
  • SwiftUI
  • jekyll
  • ios
  • AutoLayout
  • swift

티스토리

hELLO · Designed By 정상우.
Dev.YoungKyu
알고리즘

[백준 BOJ] BOJ-1018 체스판 다시 칠하기

2022. 9. 18. 20:41

#1018 체스판 다시 칠하기

문제 정리

imageimage

 

풀이

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)
  1. W 부터 시작하는 경우와 B 부터 시작하는 경우의 정답 체스판을 만듬
  2. 반복문으로 8x8 씩 검사하여 각 경우에 대해 다시 그려야하는 갯수를 구함
  3. 둘 중 더 작은 값이 적게 칠하는 횟수가 됨

 

풀고나서 알게된 것

처음에 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
    '알고리즘' 카테고리의 다른 글
    • [프로그래머스] PRG-JadenCase 문자열 만들기
    • [백준 BOJ] BOJ -2309 일곱 난쟁이
    • [백준 BOJ] BOJ-8393 합
    • [백준 BOJ] BOJ-7568 덩치
    Dev.YoungKyu
    Dev.YoungKyu
    iOS를 공부하고 있습니다

    티스토리툴바