티스토리 뷰
#문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.

#제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
#입출력 예
| [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] | 16 |
| [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 1, 0], [0, 0, 0, 0, 0]] | 13 |
| [[1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1]] | 0 |
# 내 풀이
from collections import deque
def solution(board):
answer = 0
n = len(board)
m = len(board[0])
visited = [[False] * m for _ in range(n)] # 방문기록을 체크할 배열 생성
dx = [1, 0, -1, 0, 1, 1, -1, -1] # 8방향에 대한 좌표
dy = [0, 1, 0, -1, 1, -1, - 1, 1]
for i in range(n):
for j in range(m):
if board[i][j] == 1: #배열을 돌며 1을 발견시 8방향에 대한 방문처리
queue = deque()
queue.append((i, j))
visited[i][j] = True
while queue:
x, y = queue.popleft()
for k in range(8):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < m:
visited[nx][ny] = True
for i in range(n):
for j in range(m):
if visited[i][j] == False:
answer += 1
return answer
https://school.programmers.co.kr/learn/courses/30/lessons/120866
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'개발 > 백준, 프로그래머스' 카테고리의 다른 글
| 프로그래머스 겹치는 선분의 길 [Python3] (0) | 2022.12.18 |
|---|---|
| 프로그래머스 문자열 내 마음대로 정렬하기 [Python3] (2) | 2022.12.16 |
| 프로그래머스 비밀지도 2018 KAKAO BLIND RECRUITMENT [Python3] (0) | 2022.12.13 |
| 백준 25551번: 멋쟁이 포닉스 문제풀이 [Python3] (0) | 2022.09.19 |
| 백준 10250번: ACM호텔 문제풀이 [Python3] (2) | 2022.09.14 |
댓글