[python]๋ฐฑ์ค€ 17836๋ฒˆ : ๊ณต์ฃผ๋‹˜์„ ๊ตฌํ•ด๋ผ!

๊ณต์ฃผ๋‹˜์„ ๊ตฌํ•ด๋ผ!

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งž์€ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 256 MB 2397 551 418 22.012%

๋ฌธ์ œ

์šฉ์‚ฌ๋Š” ๋งˆ์™•์ด ์ˆจ๊ฒจ๋†“์€ ๊ณต์ฃผ๋‹˜์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด (N, M) ํฌ๊ธฐ์˜ ์„ฑ ์ž…๊ตฌ (1,1)์œผ๋กœ ๋“ค์–ด์™”๋‹ค. ๋งˆ์™•์€ ์šฉ์‚ฌ๊ฐ€ ๊ณต์ฃผ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋„๋ก ์„ฑ์˜ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ๋งˆ๋ฒ• ๋ฒฝ์„ ์„ธ์›Œ๋†“์•˜๋‹ค. ์šฉ์‚ฌ๋Š” ํ˜„์žฌ์˜ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌด๊ธฐ๋กœ๋Š” ๋งˆ๋ฒ• ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋งˆ๋ฒ• ๋ฒฝ์„ ํ”ผํ•ด (N, M) ์œ„์น˜์— ์žˆ๋Š” ๊ณต์ฃผ๋‹˜์„ ๊ตฌ์ถœํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

๋งˆ์™•์€ ์šฉ์‚ฌ๊ฐ€ ๊ดด๋กญํžˆ๊ธฐ ์œ„ํ•ด ๊ณต์ฃผ์—๊ฒŒ ์ €์ฃผ๋ฅผ ๊ฑธ์—ˆ๋‹ค. ์ €์ฃผ์— ๊ฑธ๋ฆฐ ๊ณต์ฃผ๋Š” T์‹œ๊ฐ„ ์ด๋‚ด๋กœ ์šฉ์‚ฌ๋ฅผ ๋งŒ๋‚˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์˜์›ํžˆ ๋Œ๋กœ ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ณต์ฃผ๋‹˜์„ ๊ตฌ์ถœํ•˜๊ณ  ํ”„๋Ÿฌํฌ์ฆˆ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ•˜๊ณ  ์‹ถ์€ ์šฉ์‚ฌ๋Š” T์‹œ๊ฐ„ ๋‚ด์— ๋ฐ˜๋“œ์‹œ ๊ณต์ฃผ๋‹˜์ด ์žˆ๋Š” ๊ณณ์œผ๋กœ ๋„๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ์šฉ์‚ฌ๋Š” ํ•œ ์นธ์„ ์ด๋™ํ•˜๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๊ณต์ฃผ๋‹˜์ด ์žˆ๋Š” ๊ณณ์— ์ •ํ™•ํžˆ T์ดˆ๋งŒ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ๋„, ๊ตฌ์ถœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

img

์„ฑ์—๋Š” ์ด์ „ ์šฉ์‚ฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ์ „์„ค์˜ ๋ช…๊ฒ€ "๊ทธ๋žŒ"์ด ์ˆจ๊ฒจ์ ธ ์žˆ๋‹ค. ์šฉ์‚ฌ๊ฐ€ ๊ทธ๋žŒ์„ ๊ตฌํ•˜๋ฉด ๋งˆ๋ฒ•์˜ ๋ฒฝ์ด ์žˆ๋Š” ์นธ์ผ์ง€๋ผ๋„, ๋‹จ์ˆจ์— ๋ฒฝ์„ ๋ถ€์ˆ˜๊ณ  ๊ทธ ๊ณต๊ฐ„์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. "๊ทธ๋žŒ"์€ ์„ฑ์˜ ์–ด๋”˜๊ฐ€์— ๋ฐ˜๋“œ์‹œ ํ•œ ๊ฐœ ์กด์žฌํ•˜๊ณ , ์šฉ์‚ฌ๋Š” ๊ทธ๋žŒ์ด ์žˆ๋Š” ๊ณณ์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋žŒ์ด ๋ถ€์ˆ  ์ˆ˜ ์žˆ๋Š” ๋ฒฝ์˜ ๊ฐœ์ˆ˜๋Š” ์ œํ•œ์ด ์—†๋‹ค.

์šฐ๋ฆฌ ๋ชจ๋‘ ์šฉ์‚ฌ๊ฐ€ ๊ณต์ฃผ๋‹˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์ถœ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์„ฑ์˜ ํฌ๊ธฐ์ธ N, M ๊ทธ๋ฆฌ๊ณ  ๊ณต์ฃผ์—๊ฒŒ ๊ฑธ๋ฆฐ ์ €์ฃผ์˜ ์ œํ•œ ์‹œ๊ฐ„์ธ ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฒซ ์ค„์˜ ์„ธ ๊ฐœ์˜ ์ˆ˜๋Š” ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. (3 ≤ N, M ≤ 100, 1 ≤ T ≤ 5000)

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์„ฑ์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” M๊ฐœ์˜ ์ˆ˜๊ฐ€ ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ๊ณต๊ฐ„, 1์€ ๋งˆ๋ฒ•์˜ ๋ฒฝ, 2๋Š” ๊ทธ๋žŒ์ด ๋†“์—ฌ์žˆ๋Š” ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค. (1,1)๊ณผ (N,M)์€ 0์ด๋‹ค.

์ถœ๋ ฅ

์šฉ์‚ฌ๊ฐ€ ์ œํ•œ ์‹œ๊ฐ„ T์‹œ๊ฐ„ ์ด๋‚ด์— ๊ณต์ฃผ์—๊ฒŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ณต์ฃผ์—๊ฒŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋งŒ์•ฝ ์šฉ์‚ฌ๊ฐ€ ๊ณต์ฃผ๋ฅผ T์‹œ๊ฐ„ ์ด๋‚ด์— ๊ตฌ์ถœํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, "Fail"์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‚˜์˜ ๋‹ต

# ๊ณต์ฃผ๋‹˜ ๊ตฌํ•˜๊ธฐ

n,m,t = map(int,input().split())
map_arr = list()
for i in range(n):
    map_arr.append(list(map(int,input().split())))
max_num = 987654321

time_knife = int(t)

def findRoute(map_tmp, time, loc_y, loc_x):
    global time_knife

    if loc_y==n-1 and loc_x==m-1: # ๊ณต์ฃผ์—๊ฒŒ ๋„์ฐฉ
        #print('arrive')
        return time
    if map_arr[loc_y][loc_x]==2: # ๊ฒ€์— ๋„์ฐฉ
        #print('knife')
        time_knife = time+(n-loc_y-1+m-loc_x-1)
        return time_knife
    if time>time_knife: # ์‹œ๊ฐ„ ์ดˆ๊ณผ
        #print('time out')
        return max_num

    save_value = map_tmp[loc_y][loc_x]
    map_tmp[loc_y][loc_x]=1

    tmp1 = max_num
    tmp2 = max_num
    tmp3 = max_num

    loc_x = loc_x+1
    if loc_y<n and loc_x<m and loc_y>=0 and loc_x>=0:
        if map_tmp[loc_y][loc_x]!=1: 
            tmp1 = findRoute(map_tmp, time+1,loc_y,loc_x) #์˜ค๋ฅธ์ชฝ
    loc_x = loc_x-1
    loc_y = loc_y+1
    if loc_y<n and loc_x<m and loc_y>=0 and loc_x>=0:
        if map_tmp[loc_y][loc_x]!=1: 
            tmp2 = findRoute(map_tmp, time+1,loc_y,loc_x) #์•„๋ž˜
    loc_x = loc_x-1
    loc_y = loc_y-1
    if loc_y<n and loc_x<m and loc_y>=0 and loc_x>=0:
        if map_tmp[loc_y][loc_x]!=1: 
            tmp3 = findRoute(map_tmp, time+1,loc_y,loc_x) #์™ผ์ชฝ
    loc_x = loc_x+1
    loc_y = loc_y
    if min(tmp1,tmp2,tmp3)!=max_num:
        map_tmp[loc_y][loc_x]=save_value
    return min(tmp1,tmp2,tmp3)



tmp_ans =findRoute(map_arr,0,0,0)
if tmp_ans==max_num:
    print('Fail')
else:
    print(tmp_ans)

์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด์„œ m,n์— ๋„๋‹ฌํ•  ๋•Œ return, ๊ฒ€์— ๋„๋‹ฌํ•ด๋„ ๊ณ„์‚ฐํ•ด์„œ return, time์ด ์ดˆ๊ณผ๋˜๋„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰

์™„์ „ ํƒ์ƒ‰ => ๊ฒฝ๋กœ์˜ ์ˆ˜๊ฐ€ 3^(10000) ์ด๋ผ ๋ถˆ๊ฐ€๋Šฅ

์กฐ๊ฑด ์ฃผ๊ณ  ์™„์ „ ํƒ์ƒ‰ => ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด 3^(5000) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ผ ๋ถˆ๊ฐ€๋Šฅ

๋ถ„ํ•  ์ •๋ณต => ๋ถˆ๊ฐ€๋Šฅ

์™„์ „ ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ์–ด๋–ป๊ฒŒ ๊ณ„์‚ฐ์„ ํ•ด๋ด๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ผ ์•ˆ๋˜๋Š” ๊ฑธ ์•Œ๋ฉด์„œ๋„ ์ผ๋‹จ์€ ์กฐ๊ฑด์„ ์ตœ๋Œ€ํ•œ ์ฃผ๊ณ  ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. ์ €๋ฒˆ ์‹œ๊ฐ„์— ๋ฐฐ์šด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ ์‘์šฉํ•  ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋‹ค.

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ  ๋ฐ”๋กœ ๊บผ๋‚ด์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ

BFS๋กœ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋™์ผํ•˜๋‚˜, ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ๊ณ„์† ๋„˜๊ฒจ ๋ฐ›์œผ๋ฉด์„œ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐฉ์‹์œผ๋กœ ๊ทธ ์ง€์ ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ง์ ‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ์˜€๋‹ค.

๊นจ๋‹ฌ์€ ์ 

ํ•ญ์ƒ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ๋Š” ํ•ด๊ฒฐํ•˜๋ ค๊ณ ๋งŒ ๋“ค์ง€ ์ž๋ฃŒ๊ตฌ์กฐ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ƒ๊ฐ์„ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์•ž์œผ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•  ๋•Œ '๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ'๋„ ๊ณ ๋ ค๋ฅผ ํ•ด๋ณด๊ณ  ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•  ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ด์•ผ๊ฒ ๋‹ค!

๋ฐ˜์‘ํ˜•