https://school.programmers.co.kr/learn/courses/30/lessons/120866
문제설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 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)
최적화 및 개선
따로 하지 않음
어려웠던 점
없음.
'코딩테스트 > 문제 풀이 - Python' 카테고리의 다른 글
[프로그래머스 lv2]피로도.ver2 (0) | 2024.04.18 |
---|---|
[프로그래머스 lv3] 정수 삼각형 (0) | 2024.04.17 |
[프로그래머스 lv2] 하노이의 탑 (0) | 2024.04.17 |
[프로그래머스 lv2] 전력망을 둘로 나누기 (0) | 2024.04.11 |
[프로그래머스 lv3] 배달 (1) | 2024.04.10 |