1. 2중 for문을 3번 사용하고, 추가적으로 0 padding을 붙인 (n+2)X(n+2) matrix 메모리를 사용하였다.
def flag (board):
board_h = len(board)
board_w = len(board[0])
height = board_h + 2
width = board_w + 2
pos = []
for row in range(board_h):
for col in range(board_w) :
if board[row][col] == 1:
pos.append([row, col])
# 0 padding으로 채운 리스트 생성
padding_board = [[0 for _ in range(width)] for _ in range(height)]
for dot in pos:
for i in [-1, 0, 1]:
for j in [-1, 0, 1]:
padding_board[dot[0]+i + 1][dot[1]+j + 1] = 1
cnt = 0
for row in range(1, height-1):
for col in range(1, width-1):
if padding_board[row][col] == 0:
cnt += 1
return cnt
def solution(board):
answer = flag(board)
return answer
2. 멋진 풀이..
def solution(board):
n = len(board)
# set으로 둔 이유는 중복이 알아서 제거된다는 점을 이용하기 위해서
danger = set()
# 굳이 range로 각 길이를 지정할 필요가 없었음 --> enumerate() 사용
for i, row in enumerate(board):
for j, x in enumerate(row):
# not x 의미는 [not 1(폭탄)]이면 실행 X [not True ==> False]
# [not 0(안전)]이면 실행 O [not False ==> True]
if not x:
continue
# 현재 [i, j]는 폭탄이 있는 칸 -> 위험지역들을 set에 update하기
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
# 전체 개수 - 위험 지역 개수(단, boundary 확인 -> 문제에서 전체 matrix는 nxn 정사각형이라고 알려줌)
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
'알고리즘 배우기' 카테고리의 다른 글
[엘리스 코딩] 엘리스 코드 챌린지 1일차 (0) | 2024.07.08 |
---|---|
[프로그래머스] Lv 2. 도넛과 막대 그래프 (1) | 2024.06.30 |
[프로그래머스] Lv 1. 개인정보 수집 유효기간 (0) | 2024.06.30 |
[프로그래머스] Lv 1. 바탕화면 정리 (0) | 2024.06.25 |
[프로그래머스] Lv 1. 공원 산책 (0) | 2024.06.25 |