chyam

[프로그래머스 Lv3, python] - 파괴되지 않은 건물 본문

프로그래머스/LV3

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

chyam_eun 2026. 7. 3. 17:37

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

 

프로그래머스

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

programmers.co.kr

# 전현서님의 접근방법을 참고하여서 풀이하였다.

def solution(board, skill):
    n = len(board)
    m = len(board[0])

    # 누적합 배열!!
    acc = [[0] * (m + 1) for _ in range(n + 1)]

    # 스킬 적용
    for t, r1, c1, r2, c2, degree in skill:
        if t == 1: # 공격
            degree = -degree
        acc[r1][c1] += degree # 해당 점은 degree
        acc[r1][c2 + 1] -= degree # 해당 점의 마지막 배열은 -degree
        acc[r2 + 1][c1] -= degree # 해당 점의 마지막행은 -degree
        acc[r2 + 1][c2 + 1] += degree # 두번째 점은 degree

    # 가로 누적합
    for i in range(n + 1):
        for j in range(1, m + 1):
            acc[i][j] += acc[i][j - 1]

    # 세로 누적합
    for j in range(m + 1):
        for i in range(1, n + 1):
            acc[i][j] += acc[i - 1][j]

    # board에 적용하면서 정답 계산
    answer = 0
    for i in range(n):
        for j in range(m):
            if board[i][j] + acc[i][j] > 0:
                answer += 1

    return answer

https://school.programmers.co.kr/questions/25471

 

프로그래머스

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

programmers.co.kr