SSAFY/SWEA

[SWEA] # 11012. 사각영역들의 합_파이썬

728x90
반응형
 

풀기 전 생각해보기😮

  • 영역을 벗어난 곳을 계산해야 할 경우 어떻게 처리해야 할지 
  • 이미 계산된 곳을 계산하지 않으려면 어떤 처리를 해야 할지

 


풀이🛫

T = int(input())
for i in range(T):
    # 배열 생성
    N, M = map(int, input().split())
    arr = [list(map(int, input().split())) for i in range(N)]
    carr = [[True] * N for i in range(N)]
    answer = 0
 
    # 정사각형 값의 합 구하기
    for j in range(M):
        row, col, length = map(int, input().split())
        s = 0
        for c in range(length):
            for r in range(length):
            	# 제한된 범위를 넘어가지 않도록 조건 설정
                if 0<=row+r<N and 0<=col+c < N:
                    if carr[row+r][col+c] == True:
                        s += arr[row+r][col+c]
                        carr[row+r][col+c] = False
        answer += s
    print("#"+str(i+1), answer)

 

핵심 정리🎁

if 0<=row+r<N and 0<=col+c < N:
    if carr[row+r][col+c] == True:
        s += arr[row+r][col+c]
        carr[row+r][col+c] = False
  • NxN 범위 밖으로 나갈 때는 계산이 되지 않도록 if 조건문을 추가해주었다.
  • 한번 계산된 인덱스가 두번 계산되지 않도록 True/False로 checker array를 생성해서 표기해주었다.

 

후기 😎

  • try ~ catch 문으로 먼저 풀었었는데, 알고리즘에서도 출력되는 오류를 정확하게 확인하기 위해서는 try ~ catch문을 이용해 풀지 않는 것을 권장하는 편인 듯 하다.
  • 영역을 벗어날 때 if절을 통해 풀어낼 수 있는 능력을 기르도록 하자