본문 바로가기

ALGORITHM/문자열

[Swift] 2779 블라인드 (문자열)

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

 

2799번: 블라인드

첫째 줄에 M과 N이 공백으로 구분해서 주어진다. (1 ≤ M, N ≤ 100) 다음 줄에는 현재 건너편 아파트의 상태가 주어진다. 모든 창문은 문제 설명에 나온 것 처럼 4*4 그리드로 주어진다. 또, 창문과

www.acmicpc.net

 

예전에는 문제를 풀다가 굳이 Swift 로 풀어야할까 라는 생각을 많이 했었는데

요즘에는 굳이 Swift 로 풀어서 언어에 더 친숙해지자는 목표로 문제를 풀고있습니다..ㅋㅋㅋ

 

블라인드 상태가 0개 ~ 4개 인 상태를 blidState 딕셔너리에 Dictionary<Int, Int>  형태로 저장하였습니다.

 

그리고 M개의 창문 줄만큼 for문을 돌고

각 창문 줄의 창문 갯수(N개) 만큼 for문을 돌아서 각 창문의 상태가 어떠한지 windows 배열로 체크했습니다.

windows 배열로 체크 후 blindState 에 어떤 상태인지 더해주었습니다.

 

전체코드

import Foundation

let input = readLine()!.split(separator: " ").map{ Int($0)! }
let M: Int = input[0]
let N: Int = input[1]

// 블라인드 상태를 딕셔너리 형태로 저장
var blindState: Dictionary<Int, Int> = [0 : 0, 1 : 0, 2 : 0, 3 : 0, 4 : 0]

// 창문 한 줄을 큰 틀로 잡아서 for 문_
for _ in 0..<M {
    readLine()!
    // 블라인드가 쳐져 있다면 값을 더해서 몇줄의 블라인드가 쳐져 있는지 각 창문을 배열로 나타냄
    var windows: [Int] = Array(repeating: 0, count: N)
    
    for _ in 0..<4 {
        let input = readLine()!
        
        // 각 창문의 첫번째 상태만 * 인지 확인
        for k in 0..<N {
            let idx = input.index(input.startIndex, offsetBy: 5 * k + 1)
            if input[idx] == "*" {
                windows[k] += 1
            }
        }
    }
    
    // blindState dictionary 에 창문의 상태를 저장
    for window in windows {
        blindState[window]! += 1
    }
}

readLine()!

for i in 0...4 {
    print(blindState[i]!, terminator: " ")
}