๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.0] ์•ˆ์ „์ง€๋Œ€

by hyebin (Helia) 2023. 1. 2.
๋ฐ˜์‘ํ˜•

์•ˆ์ „์ง€๋Œ€

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์— ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ ๋Œ€๊ฐ์„  ์นธ์„ ๋ชจ๋‘ ์œ„ํ—˜์ง€์—ญ์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋ขฐ๋Š” 2์ฐจ์› ๋ฐฐ์—ด board์— 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๊ณ  board์—๋Š” ์ง€๋ขฐ๊ฐ€ ๋งค์„ค๋œ ์ง€์—ญ 1๊ณผ, ์ง€๋ขฐ๊ฐ€ ์—†๋Š” ์ง€์—ญ 0๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์ง€๋ขฐ๊ฐ€ ๋งค์„ค๋œ ์ง€์—ญ์˜ ์ง€๋„ board๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์•ˆ์ „ํ•œ ์ง€์—ญ์˜ ์นธ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • board๋Š” n * n ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • 1 ≤ n ≤ 100
  • ์ง€๋ขฐ๋Š” 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • board์—๋Š” ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ 1๊ณผ ์ง€๋ขฐ๊ฐ€ ์—†๋Š” ์ง€์—ญ 0๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

board result
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] 16
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] 13
[[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] 0

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • (3, 2)์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์™€ ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„  ์ด 8์นธ์€ ์œ„ํ—˜์ง€์—ญ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 16์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • (3, 2), (3, 3)์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ์ง€์—ญ๊ณผ ์ง€๋ขฐ์™€ ์ธ์ ‘ํ•œ ์œ„, ์•„๋ž˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„ ์€ ์œ„ํ—˜์ง€์—ญ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ํ—˜์ง€์—ญ์„ ์ œ์™ธํ•œ ์นธ ์ˆ˜ 13์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • ๋ชจ๋“  ์ง€์—ญ์— ์ง€๋ขฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์•ˆ์ „์ง€์—ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 0์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ board:[[Int]]) -> Int {
    var board = board
    let n = board.count
    var answer = 0
    
    for x in 0..<n{
        for y in 0..<n{
            if board[x][y] == 1{
                if x-1 >= 0{
                    if y-1 >= 0 && board[x-1][y-1] == 0 { board[x-1][y-1] = -1}
                    if y+1 < n && board[x-1][y+1] == 0 {board[x-1][y+1] = -1}
                    if board[x-1][y] == 0 {board[x-1][y] = -1}
                }
                if x+1 < n{
                    if y-1 >= 0 && board[x+1][y-1] == 0 { board[x+1][y-1] = -1}
                    if y+1 < n && board[x+1][y+1] == 0 {board[x+1][y+1] = -1}
                    if board[x+1][y] == 0 {board[x+1][y] = -1}
                }
                
                if y-1 >= 0 && board[x][y-1] == 0 { board[x][y-1] = -1}
                if y+1 < n && board[x][y+1] == 0 {board[x][y+1] = -1}
            }
        }
    }
    
    for i in 0..<n{
        answer += board[i].filter{$0 == 0}.count
    }
    
    return answer
}
๋ฐ˜์‘ํ˜•