프로그래머스/Lv.0
안전지대 - Python, 구현, set
아찌방
2024. 11. 13. 17:58
https://school.programmers.co.kr/learn/courses/30/lessons/120866?language=python3
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이 - 나의 생각
단순하게 반복문 돌려가면서 구해도 되고
폭탄의 범위를 set으로 저장 후
전체 칸 - set의 길이 = 정답 을 구해도 된다.
코드
def boom(board, x, y):
di = [(-1,-1), (-1, 0), (-1, 1), (0, -1), (0, 1),(1,-1), (1, 0), (1, 1)]
for dx, dy in di:
nx, ny = x + dx, y + dy
if 0 <= nx < len(board) and 0 <= ny < len(board[0]) and board[nx][ny] == 0:
board[nx][ny] = 2
def safezone(board):
return sum(row.count(0) for row in board)
def solution(board):
answer = 0
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 1:
boom(board, i, j)
return safezone(board)
def solution(board):
answer = 0
n = len(board)
boom = set()
for i, row in enumerate(board):
for j, col in enumerate(row):
if col:
boom.update(
(i + dx, j + dy)
for dy in [-1, 0, 1]
for dx in [-1, 0, 1]
if 0 <= i+dx < n and 0 <= j + dy < n
)
return (n*n) - len(boom)
728x90