๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 17484 ์ง„์šฐ์˜ ๋‹ฌ ์—ฌํ–‰(ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 8. 19.

๐ŸŽˆ๋ฌธ์ œ

https://www.acmicpc.net/problem/17484

 

๐ŸŽ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ ์ ‘๊ทผ

๋ฐฑํŠธ๋ž˜ํ‚น

1. ๋๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€ ๋ด์•ผ ์ตœ์ ์˜ ๋ฃจํŠธ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ๋‘๋ฒˆ ์—ฐ์† ๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ๋ฐฉํ–ฅ์ผ ๊ฒฝ์šฐ ํƒ์ƒ‰์„ ๋ฉˆ์ถ”๋„๋ก ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ’ป์ฝ”๋“œ

# 17484 ์ง„์šฐ์˜ ๋‹ฌ ์—ฌํ–‰

# ๋ฐฑํŠธ๋ž˜ํ‚น ํ•จ์ˆ˜ ๊ตฌํ˜„
def dfs(x,y,depth,derection,cnt):
    global money
    # ํ–‰๋ ฌ ๋งจ ์•„๋ž˜ ํ–‰๊นŒ์ง€ ํƒ์ƒ‰ ํ›„ ๊ทธ ๋™์•ˆ ๋“ค์—ˆ๋˜ ๋น„์šฉ๊ณผ ํ˜„์žฌ ์ตœ์†Œ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” money์™€ ๋น„๊ต
    if depth == n:
        money = min(money,cnt)
        return
    
    for i in range(3):  # 3๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ ์‹œ์ž‘
        if derection == i:  # ๊ฐ™์€ ๋ฐฉํ–ฅ์ผ ๋•Œ๋Š” continue
            continue
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
            continue
            
        dfs(nx,ny,depth+1,i,cnt+graph[nx][ny])
    return

# 1. ์ž…๋ ฅ๋ฐ›๊ธฐ
n,m = map(int,input().split())
graph = [list(map(int,input().split())) for i in range(n)]

# ๋Œ€๊ฐ์„  ์™ผ์ชฝ์•„๋ž˜, ์•„๋ž˜, ๋Œ€๊ฐ์„  ์˜ค๋ฅธ์ชฝ์•„๋ž˜ ๋ฐฉํ–ฅ
dx = [1,1,1]
dy = [-1,0,1]
money = 600 # n์ด ์ตœ๋Œ€ 6์ด๋ฏ€๋กœ ๊ฐ ์…€๋‹น 100 ๊ณฑํ•˜๋ฉด ์ตœ๋Œ€ 600 ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

for i in range(m):
    dfs(0,i,1,-1,graph[0][i])   # ์ฒซ๋ฒˆ์งธ ํ–‰ ๊ฐ ์—ด์—์„œ ์ถœ๋ฐœ

print(money)

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

์ฃผ์„์œผ๋กœ ์„ค๋ช…์€ ๋Œ€์ฒดํ•œ๋‹ค.