Skip to content

Latest commit

 

History

History
67 lines (58 loc) · 1.83 KB

undestroy.md

File metadata and controls

67 lines (58 loc) · 1.83 KB

undestroy

답은 다 맞았지만 효율성 테스트가 다 틀렸다.

def solution(board, skill):
    for i in range(len(skill)):
        if skill[i][0] == 1:
            for j in range(skill[i][1], skill[i][3] + 1):
                for k in range(skill[i][2], skill[i][4] + 1):
                    board[j][k] -= skill[i][5]
        else:
            for j in range(skill[i][1], skill[i][3] + 1):
                for k in range(skill[i][2], skill[i][4] + 1):
                    board[j][k] += skill[i][5]
    print(board)
    answer = 0
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] > 0:
                answer += 1

    return answer

누적합을 구해서 복잡도를 감소시켜야한다고 했다. 인터넷 참조

def solution(board, skill):
    answer = 0 
    h = len(board)
    w = len(board[0])
    temp = [[0] * w for _ in range(h)] 
    for [t, r1, c1, r2, c2, d] in skill:
        if t == 1: 
            temp[r1][c1] -= d
            if r2+1 < h and c2+1 < w:
                temp[r2+1][c2+1] -= d
            if r2+1 < h:
                temp[r2+1][c1] += d
            if c2+1 < w:
                temp[r1][c2+1] += d             
        else:
            temp[r1][c1] += d
            if r2+1 < h and c2+1 < w:
                temp[r2+1][c2+1] += d
            if r2+1 < h:
                temp[r2+1][c1] -= d
            if c2+1 < w:
                temp[r1][c2+1] -= d
        
    for i in range(h):
        for j in range(1, w):
            temp[i][j] += temp[i][j-1]
            
    for j in range(w):
        for i in range(1, h):
            temp[i][j] += temp[i-1][j]
    
    for i in range(h):
        for j in range(w):
            board[i][j] += temp[i][j]
            if board[i][j] > 0:
                answer += 1
            
    return answer