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: " ")
}
'ALGORITHM > 문자열' 카테고리의 다른 글
[Swift] LeetCode: Longest Common Prefix (문자열) (0) | 2022.03.15 |
---|---|
[Swift] LeetCode: Roman to Integer (문자열) (0) | 2022.03.14 |
[Swift] 2941 크로아티아 알파벳 (replacingOccurrences 함수) (0) | 2022.03.06 |
[Swift] Lv2.문자열 압축 (String.Index) (0) | 2022.03.03 |
[JAVA] 16172 나는 친구가 적다 (Large) (KMP 알고리즘) (0) | 2021.11.03 |