MUKER_DEV with iOS

[swift] λ°±μ€€ - 1388번: λ°”λ‹₯ μž₯식 λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 1388번: λ°”λ‹₯ μž₯식

MUKER 2023. 8. 8. 09:24
문제 링크
 

1388번: λ°”λ‹₯ μž₯식

ν˜•νƒμ΄λŠ” 건좕가이닀. μ§€κΈˆ 막 ν˜•νƒμ΄λŠ” ν˜•νƒμ΄μ˜ λ‚¨μž 친ꡬ κΈ°ν›ˆμ΄μ˜ 집을 막 μ™„μ„±μ‹œμΌ°λ‹€. ν˜•νƒμ΄λŠ” κΈ°ν›ˆμ΄ 방의 λ°”λ‹₯ μž₯식을 λ””μžμΈν–ˆκ³ , 이제 λͺ‡ 개의 λ‚˜λ¬΄ νŒμžκ°€ ν•„μš”ν•œμ§€ κΆκΈˆν•΄μ‘Œλ‹€. λ‚˜

www.acmicpc.net


문제

ν˜•νƒμ΄λŠ” 건좕가이닀. μ§€κΈˆ 막 ν˜•νƒμ΄λŠ” ν˜•νƒμ΄μ˜ λ‚¨μž 친ꡬ κΈ°ν›ˆμ΄μ˜ 집을 막 μ™„μ„±μ‹œμΌ°λ‹€. ν˜•νƒμ΄λŠ” κΈ°ν›ˆμ΄ 방의 λ°”λ‹₯ μž₯식을 λ””μžμΈν–ˆκ³ , 이제 λͺ‡ 개의 λ‚˜λ¬΄ νŒμžκ°€ ν•„μš”ν•œμ§€ κΆκΈˆν•΄μ‘Œλ‹€. λ‚˜λ¬΄ νŒμžλŠ” 크기 1의 λ„ˆλΉ„λ₯Ό κ°€μ‘Œκ³ , μ–‘μˆ˜μ˜ 길이λ₯Ό 가지고 μžˆλ‹€. κΈ°ν›ˆμ΄ 방은 μ§μ‚¬κ°ν˜• λͺ¨μ–‘이고, λ°© μ•ˆμ—λŠ” λ²½κ³Ό ν‰ν–‰ν•œ λͺ¨μ–‘μ˜ μ •μ‚¬κ°ν˜•μœΌλ‘œ λ‚˜λˆ„μ–΄μ Έ μžˆλ‹€.

이제 ‘-’와 ‘|’둜 이루어진 λ°”λ‹₯ μž₯식 λͺ¨μ–‘이 주어진닀. λ§Œμ•½ 두 개의 ‘-’κ°€ 인접해 있고, 같은 행에 μžˆλ‹€λ©΄, 두 κ°œλŠ” 같은 λ‚˜λ¬΄ 판자이고, 두 개의 ‘|’κ°€ 인접해 있고, 같은 열에 μžˆλ‹€λ©΄, 두 κ°œλŠ” 같은 λ‚˜λ¬΄ νŒμžμ΄λ‹€.

κΈ°ν›ˆμ΄μ˜ λ°© λ°”λ‹₯을 μž₯μ‹ν•˜λŠ”λ° ν•„μš”ν•œ λ‚˜λ¬΄ 판자의 개수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 λ°© λ°”λ‹₯의 μ„Έλ‘œ 크기Nκ³Ό κ°€λ‘œ 크기 M이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 M개의 λ¬Έμžκ°€ 주어진닀. 이것은 λ°”λ‹₯ μž₯식 λͺ¨μ–‘이고, '-‘와 ’|‘둜만 이루어져 μžˆλ‹€. Nκ³Ό M은 50 μ΄ν•˜μΈ μžμ—°μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 문제의 정닡을 좜λ ₯ν•œλ‹€.

예제


성곡 풀이

import Foundation

let NM = readLine()!.split {$0 == " "}.map {Int($0)!}, N = NM[0], M = NM[1]
let arr = (0..<N).map { _ in Array(readLine()!) }
var visited = Array(repeating: Array(repeating: false, count: M), count: N)
var result = 0

for i in 0..<N {
    for j in 0..<M {
        guard !visited[i][j] else { continue }
        var d = 1
        visited[i][j] = true
        result += 1
        if arr[i][j] == "-" {
            while j+d < M && arr[i][j+d] == "-" {
                visited[i][j+d] = true
                d += 1
            }
        } else {
            while i+d < N && arr[i+d][j] == "|" {
                visited[i+d][j] = true
                d += 1
            }
        }
    }
}
print(result)

풀이 ν‚€μ›Œλ“œ

  • λ°”λ‹₯ μž₯식 λ°°μ—΄κ³Ό λ°©λ¬Έν–ˆλŠ”μ§€ μ²΄ν¬ν•˜λŠ” 배열을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  • λ°”λ‹₯ μž₯식을 λͺ¨λ‘ νƒμƒ‰ν•˜λ©΄μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ°”λ‹₯μž₯식은 "-" 와 "|" λ₯Ό κ΅¬λΆ„ν•΄μ„œ 주변에 같은 λͺ¨μ–‘μ˜ 타일을 λ°©λ¬Έμ²˜λ¦¬ν•œ λ‹€μŒ ν•˜λ‚˜μ˜ νƒ€μΌλ‘œ 수λ₯Ό μ„Έμ€¬μŠ΅λ‹ˆλ‹€.