๊ณต์ฃผ๋์ ๊ตฌํด๋ผ!
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋ง์ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 256 MB | 2397 | 551 | 418 | 22.012% |
๋ฌธ์
์ฉ์ฌ๋ ๋ง์์ด ์จ๊ฒจ๋์ ๊ณต์ฃผ๋์ ๊ตฌํ๊ธฐ ์ํด (N, M) ํฌ๊ธฐ์ ์ฑ ์ ๊ตฌ (1,1)์ผ๋ก ๋ค์ด์๋ค. ๋ง์์ ์ฉ์ฌ๊ฐ ๊ณต์ฃผ๋ฅผ ์ฐพ์ง ๋ชปํ๋๋ก ์ฑ์ ์ฌ๋ฌ ๊ตฐ๋ฐ ๋ง๋ฒ ๋ฒฝ์ ์ธ์๋์๋ค. ์ฉ์ฌ๋ ํ์ฌ์ ๊ฐ์ง๊ณ ์๋ ๋ฌด๊ธฐ๋ก๋ ๋ง๋ฒ ๋ฒฝ์ ํต๊ณผํ ์ ์์ผ๋ฉฐ, ๋ง๋ฒ ๋ฒฝ์ ํผํด (N, M) ์์น์ ์๋ ๊ณต์ฃผ๋์ ๊ตฌ์ถํด์ผ๋ง ํ๋ค.
๋ง์์ ์ฉ์ฌ๊ฐ ๊ดด๋กญํ๊ธฐ ์ํด ๊ณต์ฃผ์๊ฒ ์ ์ฃผ๋ฅผ ๊ฑธ์๋ค. ์ ์ฃผ์ ๊ฑธ๋ฆฐ ๊ณต์ฃผ๋ T์๊ฐ ์ด๋ด๋ก ์ฉ์ฌ๋ฅผ ๋ง๋์ง ๋ชปํ๋ค๋ฉด ์์ํ ๋๋ก ๋ณํ๊ฒ ๋๋ค. ๊ณต์ฃผ๋์ ๊ตฌ์ถํ๊ณ ํ๋ฌํฌ์ฆ๋ฅผ ๋ฐ๋์ ํ๊ณ ์ถ์ ์ฉ์ฌ๋ T์๊ฐ ๋ด์ ๋ฐ๋์ ๊ณต์ฃผ๋์ด ์๋ ๊ณณ์ผ๋ก ๋๋ฌํด์ผ ํ๋ค. ์ฉ์ฌ๋ ํ ์นธ์ ์ด๋ํ๋ ๋ฐ ํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๊ณต์ฃผ๋์ด ์๋ ๊ณณ์ ์ ํํ T์ด๋ง์ ๋๋ฌํ๋ ๊ฒฝ์ฐ๋, ๊ตฌ์ถ ํ ์ ์๋ค.
์ฑ์๋ ์ด์ ์ฉ์ฌ๊ฐ ์ฌ์ฉํ๋ ์ ์ค์ ๋ช ๊ฒ "๊ทธ๋"์ด ์จ๊ฒจ์ ธ ์๋ค. ์ฉ์ฌ๊ฐ ๊ทธ๋์ ๊ตฌํ๋ฉด ๋ง๋ฒ์ ๋ฒฝ์ด ์๋ ์นธ์ผ์ง๋ผ๋, ๋จ์จ์ ๋ฒฝ์ ๋ถ์๊ณ ๊ทธ ๊ณต๊ฐ์ผ๋ก ๊ฐ ์ ์๋ค. "๊ทธ๋"์ ์ฑ์ ์ด๋๊ฐ์ ๋ฐ๋์ ํ ๊ฐ ์กด์ฌํ๊ณ , ์ฉ์ฌ๋ ๊ทธ๋์ด ์๋ ๊ณณ์ ๋์ฐฉํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ด ๋ถ์ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ ์ ํ์ด ์๋ค.
์ฐ๋ฆฌ ๋ชจ๋ ์ฉ์ฌ๊ฐ ๊ณต์ฃผ๋์ ์์ ํ๊ฒ ๊ตฌ์ถ ํ ์ ์๋์ง, ์๋ค๋ฉด ์ผ๋ง๋ ๋นจ๋ฆฌ ๊ตฌํ ์ ์๋์ง ์์๋ณด์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ฑ์ ํฌ๊ธฐ์ธ 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๋ก ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋๋ ๊ฒ์ ๋์ผํ๋, ์ฌ๋ฌ ๋ณ์๋ฅผ ๊ณ์ ๋๊ฒจ ๋ฐ์ผ๋ฉด์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋จ์ด ๋ฐฉ์์ผ๋ก ๊ทธ ์ง์ ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ง์ ์ ์ฅํ๋ ๊ฒ์ด ์ด ๋ฌธ์ ์ ํฌ์ธํธ์๋ค.
๊นจ๋ฌ์ ์
ํญ์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ ํด๊ฒฐํ๋ ค๊ณ ๋ง ๋ค์ง ์๋ฃ๊ตฌ์กฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์๊ฐ์ ๋ชปํ๋ ๊ฒ ๊ฐ๋ค. ์์ผ๋ก๋ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ตฌํ ๋ฐฉ๋ฒ์ ์๊ฐํ ๋ '๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ'๋ ๊ณ ๋ ค๋ฅผ ํด๋ณด๊ณ ์ฌ๋ฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ด์ผ๊ฒ ๋ค!
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++]๋ฐฑ์ค 17836๋ฒ : ๊ณต์ฃผ๋์ ๊ตฌํด๋ผ! (0) | 2020.03.21 |
---|---|
[c++]๋ฐฑ์ค 1260๋ฒ : DFS์ BFS (0) | 2020.03.20 |
[python]๋ฐฑ์ค 17827๋ฒ: ๋ฌํฝ์ด ๋ฆฌ์คํธ (0) | 2020.03.13 |
[python]๋ฐฑ์ค 1699๋ฒ : ์ ๊ณฑ์์ ํฉ (0) | 2020.03.06 |
[python]๋ฐฑ์ค 6549๋ฒ : ํ์คํ ๊ทธ๋จ์์ ๊ฐ์ฅ ํฐ ์ง์ฌ๊ฐํ (0) | 2020.03.06 |
Comment