프로그래머스 코딩테스트 입문 Lv.0 안전지대 (Python 풀이)

finding bombs
import copy
def solution(board):
    bomb = []
    n = len(board)
    for i in range(n):
        for j in range(n):
            if board[i][j] == 1:
                bomb.append([i, j])
    
    if len(bomb) == n*n:
        return 0
    
    danger = set()
    for p in bomb:
        danger.add((p[0]-1, p[1]-1))
        danger.add((p[0]-1, p[1]))
        danger.add((p[0], p[1]-1))
        danger.add((p[0], p[1]))
        danger.add((p[0]+1, p[1]+1))
        danger.add((p[0]+1, p[1]))
        danger.add((p[0], p[1]+1)) 
        danger.add((p[0]-1, p[1]+1))
        danger.add((p[0]+1, p[1]-1))  
    
    danger_copy = copy.deepcopy(danger)
    for p in danger:
        if p[0] > n-1 or p[0] < 0 or p[1] > n-1 or p[1] < 0:
            danger_copy.remove(p)
    answer = (n*n) - len(danger_copy)
    return answer
  • 다른 풀이도 봤지만 직관적으로 이해가 잘 되지 않아서… 나는 그냥 지뢰를 찾고, 위험지대를 체크하고, 그라운드를 벗어나는 범위를 삭제하는 순서의 직관적인 풀이로 풀었다. 😅 1 ≤ n ≤ 100이라는 조건도 있고, 레벨 0이니까…^^;; 혹시라도 보시는 분들은 참고만 하시길…ㅎㅎ
  • 위치를 지정하는데 사용한 것이 인덱스이므로 그라운드의 범위를 p[0] > n 이 아닌 p[0] > n-1로 체크해야한다는 것을 주의해야 한다.

Leave a Reply

Your email address will not be published. Required fields are marked *