본문 바로가기
프로그래머스/Lv.0

안전지대 - Python, 구현, set

by 아찌방 2024. 11. 13.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120866?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

풀이 - 나의 생각

 

단순하게 반복문 돌려가면서 구해도 되고

 

폭탄의 범위를 set으로 저장 후

 

전체 칸 - set의 길이 = 정답 을 구해도 된다.

 

코드

 

def boom(board, x, y):
    di = [(-1,-1), (-1, 0), (-1, 1), (0, -1), (0, 1),(1,-1), (1, 0), (1, 1)]
    
    for dx, dy in di:
        nx, ny = x + dx, y + dy
        if 0 <= nx < len(board) and 0 <= ny < len(board[0]) and board[nx][ny] == 0:
            board[nx][ny] = 2

def safezone(board):
    return sum(row.count(0) for row in board)

def solution(board):
    answer = 0
    
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] == 1:
                boom(board, i, j)
        
    return safezone(board)

 

def solution(board):
    answer = 0
    n = len(board)
    boom = set()
    
    for i, row in enumerate(board):
        for j, col in enumerate(row):
            if col:
                boom.update(
                    (i + dx, j + dy)
                    for dy in [-1, 0, 1]
                    for dx in [-1, 0, 1]
                    if 0 <= i+dx < n and 0 <= j + dy < n
                )
    
        
    return (n*n) - len(boom)

 

 

 

 

 

다음에 또 봐요

 

728x90