본문 바로가기
Programming/Programmers

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

by 데이터현 2022. 1. 30.

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

 

코딩테스트 연습 - 파괴되지 않은 건물

[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6

programmers.co.kr

누적합을 활용한 문제 - 2차원 배열상에서 누적합을 어떻게 사용하는지 배웠다

def solution(board, skill):
    n,m = len(board), len(board[0])
    change = [[0]*(m+1) for _ in range(n+1)]
    answer = 0
    for info in skill:
        type, r1, c1, r2, c2, degree = info
        if type == 1 : degree = -degree
        change[r1][c1] += degree
        change[r1][c2+1] -= degree
        change[r2+1][c1] -= degree
        change[r2+1][c2+1] += degree


    for i in range(1,n):
        for j in range(m):
            change[i][j] += change[i-1][j]
    for i in range(n):
        for j in range(1,m):
            change[i][j] += change[i][j-1]

    for i in range(n):
        for j in range(m):
            if board[i][j] + change[i][j] >0: answer += 1
    return answer

댓글