본문 바로가기

알고리즘

코딩 테스트 연습 20일

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