[프로그래머스] 파괴되지 않은 건물

이재윤·2025년 2월 11일
0

https://school.programmers.co.kr/learn/courses/30/lessons/92344

1) 코드

def solution(board, skill):
    
    answer = 0 
    N = len(board)
    M = len(board[0])
    
    diff = [[0]*(M+1) for _ in range(N+1)]
    
    for types, r1, c1, r2, c2, degree in skill:
        if types == 1:
            degree = (-1)*degree
            
        diff[r1][c1] += degree
        diff[r1][c2+1] -= degree
        diff[r2+1][c1] -= degree
        diff[r2+1][c2+1] += degree 
        
    for i in range(N):
        for j in range(1, M):
            diff[i][j] += diff[i][j-1]
            
    for j in range(M):
        for i in range(1, N):
            diff[i][j] += diff[i-1][j]
            
    
    for i in range(N):
        for j in range(M):
            board[i][j] += diff[i][j]
            
            if board[i][j] > 0:
                answer += 1 
                
    return answer

2) 해설

  • 누적합으로 푸는 문제이다
    -> 누적합 문제는 아직 익숙치 않아서 반드시 복습이 필요하다.
    -> 하나씩 그리면서 어떻게 동작하는지 재확인하도록 하자.

0개의 댓글