-
8.26. 프로그래머스 에서 배우는 파이썬 문법 : if not x:TIL( Today I Learned) 2023. 8. 26. 22:52
8.26
미니강의 : 프로그래머스 문제 : 안전지대 에서 배운 중요한 것
if not x:
continue
update & add
sum
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.제한사항
- board는 n * n 배열입니다.
- 1 ≤ n ≤ 100
- 지뢰는 1로 표시되어 있습니다.
- board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.
입출력 예
board result [[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 입출력 예 설명
입출력 예 #1
- (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.
입출력 예 #2
- (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.
입출력 예 #3
- 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.
@ 공부하는 코딩
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x: # 1 # ,# 4 # ,# 5 #
continue
danger.update((i+di, j+dj) for di in [-1, 0, 1] for dj in [-1, 0, 1]) # 2 #
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger) # 3#
@ 주석으로 해설
def solution(board):
n = len(board) # 보드의 크기를 저장.
danger = set() # 위험 지역의 좌표를 저장할 집합
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x: # x가 0인 경우(안전한 지역) 건너뜁니다. 해석방법 - 존재하지 않으면, 그래서 false 이면, 0 이면
continue if not x : 가 if x : 보다 효율적인 이유
# 현재 위치에서 주변 8방향의 좌표를 danger 집합에 추가. Add 와 update의 비교
danger.update((i+di, j+dj) for di in [-1, 0, 1] for dj in [-1, 0, 1])
# 전체 보드의 칸 수에서 위험 지역 칸 수를 뺀 값을 반환.
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
sum의 익숙하지 않은 방법을 요약하면 sum(조건f(x)) 조건 f(x)를 만족하는 것들의 갯수 합
@ 자세한 풀이
# 1 #
if not x: # x가 0인 경우(안전한 지역) 건너뜁니다.
# 해석방법 - 존재하지 않으면, 그래서 false 이면, 0 이면
continue
# 2 #
Add 와 update의 비교 add 둘다 집합에서 첨가할 때 , 차이 하나씩은 add, update는 한번에 여러개 가능#
# 3 #
sum의 익숙하지 않은 방법을 요약하면 sum(조건f(x)) 조건 f(x)를 만족하는 것들의 갯수 합
# 4 #
continue 의 쓰임
if 조건: continue ; 이면 해당 조건의 block 을 제외하고 계속해~~ 라는 뜻
# 5 #
if not x : 가 if x : 보다 효율적인 이유 — 하나만 계산 , 여러개를 계산 차이
'TIL( Today I Learned)' 카테고리의 다른 글
8.29 . 경사하강법 (0) 2023.08.29 8.28.프로그래머스 문제 (0) 2023.08.29 8.14.월요일 (0) 2023.08.14 8.13.일요일 (0) 2023.08.13 8.12.토요일 잭팟스터디, 문제 풀이 & 미니강의 (1) 2023.08.12