Sad Puppy 3 [프로그래머스 lv0] 안전지대 :: 개발자 아지트

https://school.programmers.co.kr/learn/courses/30/lessons/120866

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제설명

 

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, , 우 대각선 칸을 모두 위험지역으로 분류합니다.

 

 

지뢰는 2차원 배열 board 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1, 지뢰가 없는 지역 0만 존재합니다.

지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.

 

 

 

문제 해결 방법

 

폭탄 주변에 지뢰와 인접한 지역을 판단할 좌표를 미리 만들어두고, 지도를 탐색할 때, 폭탄이 발견되는 경우, 주변을 지뢰 인접 지역으로 표시하면된다. 

 

 

 

코드 구현

 

def solution(board):
    answer = 0
    
    dx = [0, 0, -1, 1, -1, 1, -1, 1]
    dy = [1, -1, 0, 0, 1, 1, -1, -1]
    
    m = len(board) 
    
    for idx, i in enumerate(board):
        for idx2, j in enumerate(i):
            if j == 1:
                # 상, 하, 좌, 우, 대각선 4개 다 -1칠하기 
                for k in range(8):
                    
                    nx = idx+dx[k]
                    ny = idx2+dy[k]
                    
                    if nx<0 or ny<0 or nx>=m or ny>=m:
                        continue
                    
                    
                    if board[nx][ny]==1:
                        continue
                        
                    elif board[nx][ny]==-1:
                        continue
                        
                    elif board[nx][ny]==0:
                        board[nx][ny]=-1

    
    for i in board:
        for j in i:
            if j == 0:
                answer+=1

    return answer

 

시간/공간 복잡도

 

O(n^2)

 

최적화 및 개선

 

따로 하지 않음

 

어려웠던 점

 

없음.

+ Recent posts