SSAFY/SWEA

[SWEA] #11010 대각 최대 합_파이썬

728x90
반응형
풀기 전 생각해보기😮
  • 대각선에 위치한 값을 탐색하는 방법
  • 주어진 이차원 배열 내에서 탐색

풀이🛫

T = int(input())
for t in range(T):
    N = int(input())
    arr = [list(map(int, input().split())) for i in range(N)]

	# 탐색 방향 설정 : 2시, 4시, 8시, 10시 방향 순 
    cv = [-1, 1, 1, -1]
    rv = [1, 1, -1, -1]

	# 한 인덱스를 기점으로 대각선 값의 합을 담을 리스트 정의
    li = []
    for col in range(N):
        for row in range(N):
        	# 해당 인덱스의 값 저장
            idx_sum = arr[col][row]
			
            # 대각선에 위치한 값의 합 계산
            for i in range(4):
                for j in range(1, N):
                    ncol = col+cv[i]*j
                    nrow = row+rv[i]*j
                    
                    if 0<=ncol<N and 0<=nrow<N:
                        idx_sum += arr[ncol][nrow]
            li.append(idx_sum)
 
 	print("#"+str(t+1), max(li))

 

핵심 정리🎁

  • 기준이 되는 방향(v: vector)를 정의하고 for문을 통해 탐색을 진행할 수 있다.
  • 최대 대각선의 길이는 N이므로, 1부터 N길이의 대각선 값을 더한다
    cf. arr[col][row]에 해당하는 값은 이미 idx_sum에 저장해두고 탐색을 시작했기 때문에 대각선의 길이가 0일 때는 고려하지 않고 제외한다.  

 

후기 😎

  • 한 대각선 방향을 기준으로 최대 거리까지 탐색을 우선하는 방식을 먼저 시도했으나, 결국 코드를 완성시키지 못했다. 이를 대신해 가까운 거리부터 이차원 배열 내에 해당하는 값들을 우선적으로 탐색하는 방법을 생각해냈다.
  • 조금은 조잡한(?) 느낌이 들지만 스스로의 힘으로 풀어냈다는 점에서 만족한다.