해리의 데브로그

(SW 문제해결 기본 - Stack2) SWEA 4881 - 배열 최소 합

|

문제

  • SWEA 4880 - [S/W 문제해결 기본] Stack2 -배열 최소 합
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

def MyCalc(y):
    global sub_result, result

    if result < sub_result:
        return

    if y == N:
        if sub_result < result:
            result = sub_result
        return

    for x in range(N):
        if not visited[x]:
            visited[x] = True
            sub_result += lst[y][x]
            MyCalc(y+1)
            visited[x] = False
            sub_result -= lst[y][x]


TC = int(input())
for tc in range(1, TC+1):
    N = int(input())
    lst = [list(map(int, input().split())) for _ in range(N)]
    visited = [0] * N
    sub_result, result = 0, 987654321
    MyCalc(0)

    print(f'#{tc} {result}')
  • backtracking 관련하여 풀었던 첫번째 문제였다. DFS와 상당부분 유사하나, 경로 탐색후 return 조건이 만족될 시, visited[x] = False & sub_result -= lst[y][x] 처럼 방문했던 경로나 값을 초기화 해주는 부분이 많이 달랐다. 이부분은 많은 연습이 필요할 듯 하다.

Comments