본문 바로가기

제로부터 C# 코딩테스트

프로그래머스 - 안전지대

728x90

폭탄 주변을 폭탄 위험 지역으로 바꾼 뒤 안전지역 칸수를 구하는 문제.

 

1. 폭탄 주변을 폭탄 위험지역으로 바꾸기 위한 함수 만들기.

2. 새로운 board 판을 만들기.

- 기존 보드판 그대로 사용하면 보드판 순회 도중 보드판이 업데이트 되기때문에 문제가 생길 수 있음.

3. board 판을 순회하면서 폭탄을 발견하면 위에 만든 함수 실행.

using System;

public class Solution {
    public int solution(int[,] board) {
        int answer = 0;
        int[,] newBoard = new int[board.GetLength(0), board.GetLength(1)];
        
        for(int i = 0 ; i< board.GetLength(0);i++){
            for(int j = 0; j<board.GetLength(1);j++){
                if(board[i,j] >0){
                    ChangeIsBomb(i,j,newBoard);
                }
            }
        }
        
        foreach(int i in newBoard){
            if(i == 0){
                answer ++;
            }
        }
        
        return answer;
    }
    
    void ChangeIsBomb(int x, int y, int[,] board){
        for(int i = x-1; i <= x+1; i++){
           for(int j = y-1; j <= y+1; j++){
               if(i >= 0 && j >= 0 && i < board.GetLength(0) && j < board.GetLength(1)){
                   if(board[i,j] == 0){
                       board[i,j] += 1;
                   }
               }
           }
        }
    }
    
}
728x90