def solution(board):
answer = 0
bomb = [[-1,1],[0,1],[1,1],[-1,0],[1,0],[-1,-1],[0,-1],[1,-1]]
x = len(board[0])
y = len(board)
new_board = [[0]*x for _ in range(y)]
for i in range(x):
for j in range(y):
if board[i][j]==1:
new_board[i][j] = 1
for idx in bomb:
if i+idx[0]>=0 and i+idx[0]<x and j+idx[1]>=0 and j+idx[1]<y:
new_board[i+idx[0]][j+idx[1]]=1
for k in range(len(new_board)):
for l in range(len(new_board[0])):
if new_board[k][l]==0:
answer+=1
return answer
+ 250818 다시 풀기
def solution(board):
answer = 0
empty_board = [[0]*len(board[0]) for _ in range(len(board[0]))]
bombs = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]
for i in range(len(board[0])):
for j in range(len(board[0])):
if board[i][j]==1:
empty_board[i][j]=1
for bomb in bombs:
dx_coor = i+bomb[0]
dy_coor = j+bomb[1]
try:
empty_board[dx_coor][dy_coor]=1
except:
pass
for k in range(len(board[0])):
answer += empty_board[k].count(0)
return answer
테스트 케이스 하나 빼고는 다 통과한다. 그러나 역시 try except 보단 범위를 맞춰서 처리하는게 더 좋을 듯 하다.
def solution(board):
answer = 0
empty_board = [[0]*len(board[0]) for _ in range(len(board[0]))]
bombs = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]
for i in range(len(board[0])):
for j in range(len(board[0])):
if board[i][j]==1:
empty_board[i][j]=1
for bomb in bombs:
dx_coor = i+bomb[0]
dy_coor = j+bomb[1]
if dx_coor>=0 and dx_coor<len(board[0]) and dy_coor>=0 and dy_coor<len(board[0]):
empty_board[dx_coor][dy_coor]=1
for k in range(len(board[0])):
answer += empty_board[k].count(0)
return answer
이렇게 하면 모두 통과한다.
'✨ 공부 기록 > 알고리즘 & 코딩테스트' 카테고리의 다른 글
| [프로그래머스 lv 0] 다음에 올 숫자 (코딩테스트 입문) (0) | 2025.03.06 |
|---|---|
| [프로그래머스 lv 0] 연속된 수의 합 (코딩테스트 입문) 2️⃣ (0) | 2025.03.05 |
| [프로그래머스 lv 0] 분수의 덧셈 (코딩테스트 입문)_Fraction 사용 (0) | 2025.03.04 |
| [프로그래머스 lv 0] 평행 (코딩테스트 입문) 2️⃣ (0) | 2025.03.04 |
| [프로그래머스 lv 0] 옹알이 (1) (코딩테스트 입문) 2️⃣ (0) | 2025.03.04 |