[프로그래머스 / C++] 안전지대

YH·2023년 8월 10일
0

문제

등수 매기기 : 문제 링크


문제 분석

  • 다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우, 대각선 칸을 모두 위험지역으로 분류한다.
  • 지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설된 지역 1과, 지뢰가 없는 지역 0만 존재한다. 지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return
  • int형 2중 벡터 xy에 지뢰가 위치에 있는 자리를 포함하여, 위, 아래, 좌, 우, 대각선 칸에 해당하는 위치를 나타내는 좌표를 저장
  • check 라는 int형 변수에 1로 초기화 하고, if문에서 board의 크기를 넘어가거나 위험구역에 해당하는 경우 0으로 변경한후 answer에 그값을 더함
  • 최종적으로 안전한 지역의 칸 수를 의미하는 answer를 return

풀이

#include <vector>

using namespace std;

int solution(vector<vector<int>> board) {
    int answer = 0;
    int n = board.size();
    int m = board[0].size();
    
    vector<vector<int>> xy{{1,1},{1,0},{1,-1},{0,-1},{0,0},{0,1},{-1,1},{-1,0},{-1,-1}};
    
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            int check = 1;
            for(const auto& k : xy) {
                int ni = i + k[0];
                int nj = j + k[1];
                if(ni >= 0 && ni < n && nj >= 0 && nj < m && board[ni][nj] == 1) {
                    check = 0;
                    break;
                }
            }
            answer += check;
        }
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글