프로그래머스 - 안전지대

GGob2._.·2023년 4월 13일
0

algorithm

목록 보기
11/55

문제 설명


n*n 배열에서 그림과 같이 폭탄 주위를 위험지역으로 분류하고, 위험지역이 아닌 땅을 세는 문제다.

폭탄은 n*n에서 1로 표현되며 0은 일반 땅을 의미한다.

접근 방식

  • 폭탄의 좌표를 배열에 임시로 저장

  • 저장했던 폭탄 좌표를 꺼내, 주위 8방면을 위험 지역으로 설정
    -> [-1, 0, 1]에 대해 x, y 모두 고려

  • 위험지역이 아닌 일반 지역 세고 출력

작성한 코드

def solution(board):
    answer = 0
    
    n = len(board)
    
    row, col = [-1, 0, 1], [-1, 0, 1]
    bomb = []
    
    for i in range(n):
        for j in range(n):
            if board[i][j] == 0:
                continue
            else:
                bomb.append([i, j])

    for i in range(len(bomb)):
        x, y = bomb[i]
        for r in row:
            for c in col:
                if x+r >= 0 and y+c >= 0:
                    try:
                        board[x+r][y+c] = 1
                    except:
                        continue
    for i in board:
        for j in i:
            if j == 0:
                answer += 1
    
    return answer

1번 케이스를 실패했는데, x, y에 -1 연산을 수행할 때, x, y가 0인 경우를 고려하지 않아 뜬금없이 마지막 값이 수정되는 문제가 있었다.

profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글