본문 바로가기
코딩테스트/문제풀이-2

[선택] 4396 지뢰찾기 [2차원 리스트]

by apple망고 2024. 2. 1.

정답 코드

import Foundation

let dr = [-1, 1, 0, 0, -1, -1, 1, 1]
let dc = [0, 0, -1, 1, -1, 1, -1, 1]

let N = Int(readLine()!)!

var board_info = [[Character]]()
var current_status = [[Character]]()

for _ in 0..<N {
    board_info.append(Array(readLine()!))
}

for _ in 0..<N {
    current_status.append(Array(readLine()!))
}

var ans = Array(repeating: Array(repeating: ".", count: N), count: N)
var mine = false

for r in 0..<N {
    for c in 0..<N {
        if current_status[r][c] == "x" {
            var cnt = 0
            for d in 0..<8 {
                let nr = r + dr[d]
                let nc = c + dc[d]
                if nr >= 0 && nr < N && nc >= 0 && nc < N && board_info[nr][nc] == "*" {
                    cnt += 1
                }
            }
            ans[r][c] = String(cnt)
            
            if board_info[r][c] == "*" {
                mine = true
            }
        }
    }
}

if mine {
    for r in 0..<N {
        for c in 0..<N {
            if board_info[r][c] == "*" {
                ans[r][c] = "*"
            }
        }
    }
}

for line in ans {
    print(line.joined())
}

 

코드 설명

  • 열린 좌표의 경우에
  • 좌표의 상하좌우 좌상, 우상, 좌하, 우하 뱡향으로 순회하면서 board 내 영역에 있고 폭탄이 있는 경우 cnt의 수를 증가 시켜서
  • 답인 ans좌표에 그 값을 넣는다.
  • 눌른 좌표에 폭탄이 있는 경우 mine값을 true로 해서 ans 배열에 폭탄의 위치를 모두 표기 한다.

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

 

4396번: 지뢰 찾기

지뢰찾기는 n × n 격자 위에서 이루어진다. m개의 지뢰가 각각 서로 다른 격자 위에 숨겨져 있다. 플레이어는 격자판의 어느 지점을 건드리기를 계속한다. 지뢰가 있는 지점을 건드리면 플레이어

www.acmicpc.net