[BOJ][๐ŸŸก5][๋ฐฑ์ค€#16509] ์žฅ๊ตฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #16509


๋ฌธ์ œ

์˜ค๋žœ๋งŒ์— ํœด๊ฐ€๋ฅผ ๋‚˜์˜จ ํ˜ธ๊ทผ์ด๋Š” ๋ฌธ๋“ ๋™์•„๋ฆฌ๋ฐฉ์— ์žˆ๋Š” ์žฅ๊ธฐ๊ฐ€ ํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค. ํ•˜์ง€๋งŒ ์žฅ๊ธฐ๋ฅผ ์˜ค๋žซ๋™์•ˆ ํ•˜์ง€ ์•Š์€ ํƒ“์ธ์ง€ ์˜ˆ์ „์—๋Š” ์ž˜ ์“ฐ๋˜ ์ƒ์„ ์ œ๋Œ€๋กœ ์“ฐ๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋‹ค. ํ˜ธ๊ทผ์ด๋ฅผ ์œ„ํ•ด ์ƒ์„ ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ• ์ง€ ๋„์™€์ฃผ์ž.

์œ„ ๊ทธ๋ฆผ์€ 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๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ๊ฐ€๋กœ, ์„ธ๋กœ๋Š” 0๋ถ€ํ„ฐ 9, 0๋ถ€ํ„ฐ 8์ด๋ฏ€๋กœ ๊ฐ๊ฐ I, J๋ฅผ 10, 9๋กœ ๋‘์–ด ๋„˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.
  2. ์‹œ์ž‘์ ๊ณผ ๋ชฉํ‘œ์ ์˜ ์ขŒํ‘œ๋ฅผ ๋ฐ›์•„ ์ €์žฅํ•œ๋‹ค.
  3. ์ฒซ๋ฒˆ์งธ ์Šคํ…์„ key๋กœ ํ•˜๊ณ , ํ•ด๋‹น step์„ ๋ฐŸ๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 2๊ฐœ์˜ ๋ฐฉํ–ฅ์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ ๊ฒƒ์„ value๋กœ ๋‘๋Š” ๋”•์…”๋„ˆ๋ฆฌ D๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  4. ์‹œ์ž‘์  ์ขŒํ‘œ๋ฅผ deque Q์— ์ถ”๊ฐ€ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์€ Q์— ์ €์žฅ๋  ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•˜์˜€์Œ์—๋„ ์™•์— ๋‹ฟ์ง€ ๋ชปํ•  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค.
  5. D์˜ key๋“ค์€ ๋ง ๊ทธ๋ž˜๋„ ํ˜„์žฌ ์ขŒํ‘œ์—์„œ ์ฒซ ๋ฐœ์„ ๋ฐŸ๋Š” 4๊ฐœ์˜ ๋ฐฉํ–ฅ์ด๋‹ค. ์ฒซ ๋ฐœ์„ ๋ฐŸ๋Š” ์ขŒํ‘œ๋ฅผ si1, sj1์œผ๋กœ ๋‘์—ˆ๋‹ค. ์ด ์ฒซ ๋ฐœ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด continueํ•œ๋‹ค. ๋˜ํ•œ ์ด๋Š” ์ด๋™์˜ ๊ณผ์ •์ด๋ฏ€๋กœ ์™•์ด ํ•ด๋‹น ์œ„์น˜์— ์žˆ์–ด๋„ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹Œ ์žฅ์• ๋ฌผ๋กœ ์ž‘์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— si1๊ณผ sj1์— ์™•์ด ์žˆ์–ด๋„ continueํ•œ๋‹ค.
  6. ๋‹ค์Œ์€ ์ฒซ ๋ฐœ์˜ ์œ„์น˜๋ฅผ key๋กœ ํ•˜๋Š” value๋“ค์˜ ์ด๋™ ๋ฐฉํ–ฅ์„ ๊ฐ๊ฐ i2, j2๋กœ ํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ฒซ ๋ฐœ์„ ๋ฐŸ์€ ์œ„์น˜ si1, sj1์— i2์™€ j2๋ฅผ ๊ฐ๊ฐ ๋”ํ•ด ๋Œ€๊ฐ์„ ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ 2๋ฒˆ ์ด๋™ํ•˜๋ฏ€๋กœ ์ค‘๊ฐ„ ๊ณผ์ •์— ์™•์ด ์žˆ์œผ๋ฉด continueํ•œ๋‹ค.
  7. i2์™€ j2๋ฅผ si2์™€ sj2์— ๋”ํ•ด si3์™€ sj3์„ ๋งŒ๋“ ๋‹ค. ์ด๊ฒƒ์ด ni์™€ nj์˜ ์ขŒํ‘œ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 8๊ฐœ์˜ ์ด๋™ ์ขŒํ‘œ์ด๋‹ค. ๋งŒ์•ฝ ์ด ์ขŒํ‘œ๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด continueํ•œ๋‹ค.
  8. ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ง€๋ฉด์„œ ํ•ด๋‹น ์ขŒํ‘œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์ด๋™ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” visit 2์ฐจ์› ๋ฐฐ์—ด์„ ํ™œ์šฉํ•œ๋‹ค. visit์€ ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‹œ์ž‘์ ์—์„œ 1๋กœ ๋‘์—ˆ๋‹ค. ์ดํ›„์— ์ด๋™ ์œ„์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ง์ „ ์œ„์น˜์˜ ์ตœ์†Œ ์ด๋™์ˆ˜์ธ visit[ni][nj]์— 1์„ ๋”ํ•œ ๊ฒƒ์„ visit[si3][sj3]์— ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— visit[si3][sj3]์— ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ ์ด๋ฏ€๋กœ continueํ•œ๋‹ค.
  9. si3์™€ sj3์ด ti์™€ tj๋ผ๋ฉด ์™•์— ๋‹ฟ์€ ๊ฒƒ์ด๋ฏ€๋กœ visit[ni][nj]๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฒ˜์Œ์— ์‹œ์ž‘์ ์—์„œ visit[bi][bj]๋ฅผ 1๋กœ ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— visit[ni][nj]+1์ด ์•„๋‹ˆ๋ผ 1์„ ๋บ€ visit[ni][nj]๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  10. ๋งŒ์•ฝ ์ด๋™ ์ขŒํ‘œ๊ฐ€ ๋ฒ”์œ„ ๋‚ด์ด๋ฉด์„œ ์™•์ด ์•„๋‹ˆ๋ผ๋ฉด visit[si3][sj3]์— visit[ni][nj]+1์„ ์ €์žฅํ•˜๋ฉฐ ๋ฐฉ๋ฌธ์„ ์ฒดํฌํ•˜๊ณ , Q์— (si3, sj3)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์Œ ์ด๋™์˜ ์‹œ์ž‘์ ์œผ๋กœ ์‚ผ๋Š”๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ