ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ ๋ธŒ๋ฃจํŠธํฌ์Šค(์™„์ „ํƒ์ƒ‰)

 

thinking

์•„ ๋ฌธ์ œ ์ œ๋Œ€๋กœ ์•ˆ์ฝ์–ด์„œ ์ง€์กด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค . . . ๐Ÿ˜‘

๋ฌธ์ œ์—์„œ ๋งํ•˜๋“ฏ, ( e[1][2]+e[2][3]+e[3][1] )

 1, 2 -> 2, 3 -> 3, 1  ์˜ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ y์ธ๋ฑ์Šค(์—ด)์™€ ๋‹ค์Œ ์‹œ์ž‘ํ•˜๋Š” x์ธ๋ฑ์Šค(ํ–‰)๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋‘๊ณ  ํ’€๋ฉด ๋œ๋‹ค ! !

์ด๋ ‡๊ฒŒ ๊ณ„์† ์ด์–ด์ง€๋‹ค๊ฐ€ ์ฒ˜์Œ ์ธ๋ฑ์Šค์™€ ๋™์ผํ•ด์ง€๋ฉด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋œ๋‹ค.

์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ๊ธฐ์กด์˜ ๊ฒฐ๊ณผ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋งŒ ํ•จ์ˆ˜๊ฐ€ ์ง„ํ–‰๋˜๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ๊ฑธ์–ด์ฃผ์—ˆ๋‹ค.

์ฒ˜์Œ ์‹œ์ž‘์€ ๋ฌด์กฐ๊ฑด e[0][1] ๋˜๋Š” e[0][2] ๋˜๋Š” ... e[0][N-1] ์ด๋ฏ€๋กœ range๋Š” (1, N)๊นŒ์ง€๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

 

์ฝ”๋“œ

T = int(input())

# (current, next) = 0,1 -> 1,2 -> 2,0
def dfs(current, tmp):
    global res
    if tmp < res:
        if 0 not in visited[1:]:  # ์ „๋ถ€ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด
            res = min(res, tmp + a[current][0])  # ๊ฒฐ๊ณผ๊ฐ’ ๊ฐฑ์‹ ํ•˜๊ณ  ํ•จ์ˆ˜ ์ข…๋ฃŒ
            return
        for next in range(1, N):
            if a[current][next] != 0 and visited[next] == 0:
                visited[next] = 1
                dfs(next, tmp + a[current][next])
                visited[next] = 0


for tc in range(1, T+1):
    N = int(input())
    a = [list(map(int, input().split())) for _ in range(N)]

    res = 10000
    for i in range(1, N):
        visited = [0] * N
        visited[i] = 1
        dfs(i, a[0][i])  # current_y, tmp_sum
    print("#{} {}".format(tc, res))
๋Œ“๊ธ€