728x90
코딩 테스트 연습 20일
프로그래머스, 안전지대
📄 나의 코드
board = [[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]]
def solution(board):
x = []
y = []
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 1:
x.append(i)
y.append(j)
x_min = x[0]-1 if x[0]-1 >= 0 else 0
x_max = x[-1] + 2 if x[-1] + 2 < len(board) else len(board)
y_min = y[0]-1 if y[0]-1 >= 0 else 0
y_max = y[-1] + 2 if y[-1] + 2 < len(board) else len(board)
for k in range(x_min, x_max):
for z in range(y_min, y_max):
board[k][z] = 1
cnt = 0
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
cnt += 1
return cnt
print(solution(board))
런타임 에러 & 실패 ㅠㅠㅠ
반례 : [[1,0,0],[0,0,0],[0,0,1]]
📄 나의 코드
board = [[1,0,0],[0,0,0],[0,0,1]]
def solution(board):
targets = []
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 1:
targets.append([i, j])
for target in targets:
x_min = target[0] - 1 if target[0] - 1 >= 0 else 0
x_max = target[0] + 2 if target[0] + 2 < len(board) else len(board)
y_min = target[1] - 1 if target[1] - 1 >= 0 else 0
y_max = target[1] + 2 if target[1] + 2 < len(board) else len(board)
for k in range(x_min, x_max):
for z in range(y_min, y_max):
board[k][z] = 1
cnt = 0
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
cnt += 1
return cnt
print(solution(board))
📄 공부할 만한 코드
def solution(board):
answer = 0
for col in range(len(board)):
for row in range(len(board[col])):
if board[row][col] == 1:
for j in range(max(col-1,0),min(col+2,len(board))):
for i in range(max(row-1,0),min(row+2,len(board))):
if board[i][j] == 1:
continue
board[i][j] = -1
for i in board:
answer += i.count(0)
return answer
max, min 이용해 배열 index범위 초과하지 않도록 설정 할 수 있구나!
'알고리즘' 카테고리의 다른 글
코딩 테스트 연습 22일,23일,26일 (0) | 2022.12.26 |
---|---|
코딩 테스트 연습 21일 (0) | 2022.12.21 |
코딩 테스트 연습 19일 (0) | 2022.12.19 |
코딩 테스트 연습 15일&16일 (0) | 2022.12.16 |
코딩 테스트 연습 14일 (0) | 2022.12.14 |