[BOJ][๐ก5][๋ฐฑ์ค#16509] ์ฅ๊ตฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ค๋๋ง์ ํด๊ฐ๋ฅผ ๋์จ ํธ๊ทผ์ด๋ ๋ฌธ๋ ๋์๋ฆฌ๋ฐฉ์ ์๋ ์ฅ๊ธฐ๊ฐ ํ๊ณ ์ถ์ด์ก๋ค. ํ์ง๋ง ์ฅ๊ธฐ๋ฅผ ์ค๋ซ๋์ ํ์ง ์์ ํ์ธ์ง ์์ ์๋ ์ ์ฐ๋ ์์ ์ ๋๋ก ์ฐ๋ ๊ฒ์ด ๋๋ฌด ํ๋ค์๋ค. ํธ๊ทผ์ด๋ฅผ ์ํด ์์ ์ด๋ป๊ฒ ์จ์ผ ํ ์ง ๋์์ฃผ์.
์ ๊ทธ๋ฆผ์ 10ร9 ํฌ๊ธฐ์ ์ฅ๊ธฐํ์ ๋ํ๋ด๋ฉฐ, ์์ (5, 4)์, ์์ (1, 4)์ ์๋ฆฌ ์ก๊ณ ์๋ ๊ธฐ๋ฌผ์ด๋ค. (0, 3)๊ณผ (2, 5)๋ฅผ ๊ผญ์ง์ ์ผ๋ก ํ๋ ์ฌ๊ฐํ๊ณผ, (7, 3)๊ณผ (9, 5)๋ฅผ ๊ผญ์ง์ ์ผ๋ก ํ๋ ์ฌ๊ฐํ์ ์์ด ์์นํ ์ ์๋ ๊ถ์ฑ์ด๋ผ๊ณ ํ๋ค. ์์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 8๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์ง์ผ ์ ์๋๋ฐ, ์, ํ, ์ข, ์ฐ๋ก ํ ์นธ์ ์ด๋ํ ํ์ ๊ฐ์ ๋ฐฉํฅ ์ชฝ ๋๊ฐ์ ์ผ๋ก ๋ ์นธ ์ด๋ํ๋ค.
๋ง์ฝ ์์ด ์ด๋ํ๋ ๊ฒฝ๋ก์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๊ธฐ๋ฌผ์ด ์๋ค๋ฉด ์์ ๊ทธ์ชฝ์ผ๋ก ์ด๋ํ ์ ์๋ค. ๋ํ, ์์ด ์ฅ๊ธฐํ์ ๋ฒ์ด๋ ์๋ ์๋ค. 10ร9 ํฌ๊ธฐ์ ์ฅ๊ธฐํ ์์ ์๊ณผ ์์ ์ฒ์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์์ด ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์์ ์์น๋ฅผ ์๋ฏธํ๋ ์ ์ R1, C1์ด ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค์๋ ์์ ์์น๋ฅผ ์๋ฏธํ๋ ์ ์ R2, C2๊ฐ ์ฃผ์ด์ง๋ค. ์ฅ๊ธฐํ์์ Ri (0 โค Ri โค 9)๋ ํ์, Ci (0 โค Ci โค 8)๋ ์ด์ ์๋ฏธํ๋ค. ์์ ํญ์ ๊ถ์ฑ์ ์๋ฆฌ ์ก๊ณ ์์ผ๋ฉฐ, ์๊ณผ ์์ ์์น๋ ๊ฒน์น์ง ์๋๋ค.
์ถ๋ ฅ
์์ด ์์๊ฒ ๋๋ฌํ ์ ์๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋๋ฌํ ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
4 2
2 5
์ถ๋ ฅ
1
์์ 2
์ ๋ ฅ
0 1
8 4
์ถ๋ ฅ
3
์์ 3
์ ๋ ฅ
0 2
1 4
์ถ๋ ฅ
5
My Sol
from collections import deque
def main():
I, J = 10, 9
bi, bj = map(int, input().split())
ti, tj = map(int, input().split())
D = {
(-1,0): [(-1,-1),(-1,1)],
(1,0): [(1,1),(1,-1)],
(0,1): [(-1,1),(1,1)],
(0,-1): [(-1,-1),(1,-1)]
}
Q = deque([(bi, bj)])
visit = [[0]*J for _ in range(I)]
visit[bi][bj] = 1
while Q:
ni, nj = Q.popleft()
for i1, j1 in D.keys():
si1, sj1 = ni+i1, nj+j1
if not (0<=si1<I and 0<=sj1<J): continue
if si1==ti and sj1==tj: continue
for i2, j2 in D[(i1, j1)]:
si2, sj2 = si1+i2, sj1+j2
if si2==ti and sj2==tj: continue
si3, sj3 = si2+i2, sj2+j2
if not (0<=si3<I and 0<=sj3<J): continue
if visit[si3][sj3]: continue
if si3==ti and sj3==tj: return visit[ni][nj]
visit[si3][sj3] = visit[ni][nj]+1
Q.append((si3, sj3))
return -1
print(main())
๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด ๊ฐ๋จํ์ง๋ง, ๊ฒฝ๋ก ์ ํ์ ์์ด ์ฅ์ ๋ฌผ์ ํต๊ณผํ์ง ๋ชปํ๋ค๋ ์ ์ ๊ฐ๊ณผํ๋ฉด ์ฝ๊ฒ ํจ์ ์ ๋น ์ง ์ ์๋ ๋ฌธ์ ์๋ค. ์๊ณ ๋ฆฌ์ฆ์ BFS๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ๋ก, ์ธ๋ก๋ 0๋ถํฐ 9, 0๋ถํฐ 8์ด๋ฏ๋ก ๊ฐ๊ฐ I, J๋ฅผ 10, 9๋ก ๋์ด ๋์ง ๋ชปํ๊ฒ ํ์๋ค.
- ์์์ ๊ณผ ๋ชฉํ์ ์ ์ขํ๋ฅผ ๋ฐ์ ์ ์ฅํ๋ค.
- ์ฒซ๋ฒ์งธ ์คํ
์ key๋ก ํ๊ณ , ํด๋น step์ ๋ฐ๊ณ ์ด๋ํ ์ ์๋ 2๊ฐ์ ๋ฐฉํฅ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ ๊ฒ์ value๋ก ๋๋ ๋์
๋๋ฆฌ
D
๋ฅผ ์ง์ ํ๋ค. - ์์์ ์ขํ๋ฅผ deque
Q
์ ์ถ๊ฐํ๋ค. ๋ฐ๋ณต๋ฌธ์Q
์ ์ ์ฅ๋ ๋ชจ๋ ์ขํ๋ฅผ ๊บผ๋ด ์ฌ์ฉํ์์์๋ ์์ ๋ฟ์ง ๋ชปํ ๋๊น์ง ์งํํ๋ค. D
์ key๋ค์ ๋ง ๊ทธ๋๋ ํ์ฌ ์ขํ์์ ์ฒซ ๋ฐ์ ๋ฐ๋ 4๊ฐ์ ๋ฐฉํฅ์ด๋ค. ์ฒซ ๋ฐ์ ๋ฐ๋ ์ขํ๋ฅผsi1
,sj1
์ผ๋ก ๋์๋ค. ์ด ์ฒซ ๋ฐ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด continueํ๋ค. ๋ํ ์ด๋ ์ด๋์ ๊ณผ์ ์ด๋ฏ๋ก ์์ด ํด๋น ์์น์ ์์ด๋ ๋ชฉํ๊ฐ ์๋ ์ฅ์ ๋ฌผ๋ก ์์ฉํ๊ธฐ ๋๋ฌธ์si1
๊ณผsj1
์ ์์ด ์์ด๋ continueํ๋ค.- ๋ค์์ ์ฒซ ๋ฐ์ ์์น๋ฅผ key๋ก ํ๋ value๋ค์ ์ด๋ ๋ฐฉํฅ์ ๊ฐ๊ฐ
i2
,j2
๋ก ํ์ฌ ๋ฐ๋ณต๋ฌธ์ ์งํํ๋ค. ์ฒซ ๋ฐ์ ๋ฐ์ ์์นsi1
,sj1
์i2
์j2
๋ฅผ ๊ฐ๊ฐ ๋ํด ๋๊ฐ์ ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค. ์ฌ๊ธฐ์์๋ ํด๋น ๋ฐฉํฅ์ผ๋ก 2๋ฒ ์ด๋ํ๋ฏ๋ก ์ค๊ฐ ๊ณผ์ ์ ์์ด ์์ผ๋ฉด continueํ๋ค. i2
์j2
๋ฅผsi2
์sj2
์ ๋ํดsi3
์sj3
์ ๋ง๋ ๋ค. ์ด๊ฒ์ดni
์nj
์ ์ขํ์์ ์ด๋ํ ์ ์๋ 8๊ฐ์ ์ด๋ ์ขํ์ด๋ค. ๋ง์ฝ ์ด ์ขํ๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด continueํ๋ค.- ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ๋ฐ์ง๋ฉด์ ํด๋น ์ขํ์ ๋๋ฌํ๊ธฐ ์ํ ์ต์ ์ด๋ ์๋ฅผ ์ ์ฅํ๋
visit
2์ฐจ์ ๋ฐฐ์ด์ ํ์ฉํ๋ค.visit
์ ๋ชจ๋ ์ขํ๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๊ณ ์์์ ์์ 1๋ก ๋์๋ค. ์ดํ์ ์ด๋ ์์น๊ฐ ๊ฐ๋ฅํ๋ค๋ฉด ์ง์ ์์น์ ์ต์ ์ด๋์์ธvisit[ni][nj]
์ 1์ ๋ํ ๊ฒ์visit[si3][sj3]
์ ์ ์ฅํ๊ฒ ๋๋ค. ๋๋ฌธ์visit[si3][sj3]
์ ๊ฐ์ด ์์ผ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ์ ์ด๋ฏ๋ก continueํ๋ค. si3
์sj3
์ดti
์tj
๋ผ๋ฉด ์์ ๋ฟ์ ๊ฒ์ด๋ฏ๋กvisit[ni][nj]
๋ฅผ ๋ฐํํ๋ค. ์๋ํ๋ฉด ์ฒ์์ ์์์ ์์visit[bi][bj]
๋ฅผ 1๋ก ๋์๊ธฐ ๋๋ฌธ์visit[ni][nj]+1
์ด ์๋๋ผ 1์ ๋บvisit[ni][nj]
๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.- ๋ง์ฝ ์ด๋ ์ขํ๊ฐ ๋ฒ์ ๋ด์ด๋ฉด์ ์์ด ์๋๋ผ๋ฉด
visit[si3][sj3]
์visit[ni][nj]+1
์ ์ ์ฅํ๋ฉฐ ๋ฐฉ๋ฌธ์ ์ฒดํฌํ๊ณ ,Q
์(si3, sj3)
์ ์ถ๊ฐํ์ฌ ๋ค์ ์ด๋์ ์์์ ์ผ๋ก ์ผ๋๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ