[BOJ][๐ŸŸก2][๋ฐฑ์ค€#19236] ์ฒญ์†Œ๋…„ ์ƒ์–ด

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #19236


๋ฌธ์ œ

์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์„ฑ์žฅํ•ด ์ฒญ์†Œ๋…„ ์ƒ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค.

4ร—4ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์ด ์žˆ๊ณ , ํฌ๊ธฐ๊ฐ€ 1ร—1์ธ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ณต๊ฐ„์˜ ๊ฐ ์นธ์€ (x, y)์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•˜๋ฉฐ, x๋Š” ํ–‰์˜ ๋ฒˆํ˜ธ, y๋Š” ์—ด์˜ ๋ฒˆํ˜ธ์ด๋‹ค. ํ•œ ์นธ์—๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ํ•œ ๋งˆ๋ฆฌ ์กด์žฌํ•œ๋‹ค. ๊ฐ ๋ฌผ๊ณ ๊ธฐ๋Š” ๋ฒˆํ˜ธ์™€ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฒˆํ˜ธ๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 16๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ๋‘ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๊ฐ™์€ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋ฐฉํ–ฅ์€ 8๊ฐ€์ง€ ๋ฐฉํ–ฅ(์ƒํ•˜์ขŒ์šฐ, ๋Œ€๊ฐ์„ ) ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

์˜ค๋Š˜์€ ์ฒญ์†Œ๋…„ ์ƒ์–ด๊ฐ€ ์ด ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐ€ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์ฒญ์†Œ๋…„ ์ƒ์–ด๋Š” (0, 0)์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๊ณ , (0, 0)์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ์ƒ์–ด์˜ ๋ฐฉํ–ฅ์€ (0, 0)์— ์žˆ๋˜ ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฐฉํ–ฅ๊ณผ ๊ฐ™๋‹ค. ์ดํ›„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ด๋™ํ•œ๋‹ค.

๋ฌผ๊ณ ๊ธฐ๋Š” ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๋ฌผ๊ณ ๊ธฐ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ด๋™ํ•œ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๋Š” ํ•œ ์นธ์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ๋นˆ ์นธ๊ณผ ๋‹ค๋ฅธ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ, ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์€ ์ƒ์–ด๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ๊ณต๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋Š” ์นธ์ด๋‹ค. ๊ฐ ๋ฌผ๊ณ ๊ธฐ๋Š” ๋ฐฉํ–ฅ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ํ–ฅํ•  ๋•Œ๊นŒ์ง€ ๋ฐฉํ–ฅ์„ 45๋„ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „์‹œํ‚จ๋‹ค. ๋งŒ์•ฝ, ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์ด ์—†์œผ๋ฉด ์ด๋™์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์นธ์œผ๋กœ ์ด๋™์„ ํ•œ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ์„œ๋กœ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋™ํ•œ๋‹ค.

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

<๊ทธ๋ฆผ 1>

<๊ทธ๋ฆผ 1>์€ ์ฒญ์†Œ๋…„ ์ƒ์–ด๊ฐ€ ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ดˆ๊ธฐ ์ƒํƒœ์ด๋‹ค. ์ƒ์–ด๊ฐ€ ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐ€๋ฉด (0, 0)์— ์žˆ๋Š” 7๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๊ณ , ์ƒ์–ด์˜ ๋ฐฉํ–ฅ์€ โ†˜์ด ๋œ๋‹ค. <๊ทธ๋ฆผ 2>๋Š” ์ƒ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ์งํ›„์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

<๊ทธ๋ฆผ 2>

์ด์ œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. 1๋ฒˆ ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฐฉํ–ฅ์€ โ†—์ด๋‹ค. โ†— ๋ฐฉํ–ฅ์—๋Š” ์นธ์ด ์žˆ๊ณ , 15๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ๊ทธ ์นธ์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, 1๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ด๋™์„ ๋งˆ์น˜๋ฉด <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ™์•„์ง„๋‹ค.

<๊ทธ๋ฆผ 3>

2๋ฒˆ ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฐฉํ–ฅ์€ โ†์ธ๋ฐ, ๊ทธ ๋ฐฉํ–ฅ์—๋Š” ์ƒ์–ด๊ฐ€ ์žˆ์œผ๋‹ˆ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐฉํ–ฅ์„ 45๋„ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „์„ ํ•˜๋ฉด โ†™๊ฐ€ ๋˜๊ณ , ์ด ์นธ์—๋Š” 3๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์ด๋‹ˆ ์„œ๋กœ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ณ , <๊ทธ๋ฆผ 4>์™€ ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.

<๊ทธ๋ฆผ 4>

3๋ฒˆ ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฐฉํ–ฅ์€ โ†‘์ด๊ณ , ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์นธ์ด๋‹ค. 45๋„ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „์„ ํ•œ ๋ฐฉํ–ฅ โ†–๋„ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋‹ˆ, ๋‹ค์‹œ ํšŒ์ „์„ ํ•œ๋‹ค. โ† ๋ฐฉํ–ฅ์—๋Š” ์ƒ์–ด๊ฐ€ ์žˆ์œผ๋‹ˆ ๋˜ ํšŒ์ „์„ ํ•ด์•ผ ํ•œ๋‹ค. โ†™ ๋ฐฉํ–ฅ์—๋Š” 2๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ์œผ๋‹ˆ ์„œ๋กœ์˜ ์œ„์น˜๋ฅผ ๊ตํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ด๋™ํ•˜๋ฉด <๊ทธ๋ฆผ 5>์™€ ๊ฐ™์•„์ง„๋‹ค.

<๊ทธ๋ฆผ 5>

๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋ชจ๋‘ ์ด๋™ํ–ˆ์œผ๋‹ˆ ์ด์ œ ์ƒ์–ด๊ฐ€ ์ด๋™ํ•  ์ˆœ์„œ์ด๋‹ค. ์ƒ์–ด์˜ ๋ฐฉํ–ฅ์€ โ†˜์ด๊ณ , ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ 12๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ, 15๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ, 8๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ ์ค‘์— ํ•˜๋‚˜์ด๋‹ค. ๋งŒ์•ฝ, 8๋ฒˆ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉด, <๊ทธ๋ฆผ 6>๊ณผ ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.

<๊ทธ๋ฆผ 6>

์ƒ์–ด๊ฐ€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ 4๊ฐœ์˜ ์ค„์— ๊ฐ ์นธ์˜ ๋“ค์–ด์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ •๋ณด๊ฐ€ 1๋ฒˆ ํ–‰๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ฌผ๊ณ ๊ธฐ์˜ ์ •๋ณด๋Š” ๋‘ ์ •์ˆ˜ ai, bi๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ai๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฒˆํ˜ธ, bi๋Š” ๋ฐฉํ–ฅ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐฉํ–ฅ bi๋Š” 8๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ , 1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ โ†‘, โ†–, โ†, โ†™, โ†“, โ†˜, โ†’, โ†— ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.


์ถœ๋ ฅ

์ƒ์–ด๊ฐ€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ์˜ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

7 6 2 3 15 6 9 8
3 1 1 8 14 7 10 1
6 1 13 6 4 3 11 4
16 1 8 7 5 2 12 2


์ถœ๋ ฅ

33


์˜ˆ์ œ 2

์ž…๋ ฅ

16 7 1 4 4 3 12 8
14 7 7 6 3 4 10 2
5 2 15 2 8 3 6 4
11 8 2 4 13 5 9 4


์ถœ๋ ฅ

43


์˜ˆ์ œ 3

์ž…๋ ฅ

12 6 14 5 4 5 6 7
15 1 11 7 3 7 7 5
10 3 8 3 16 6 1 1
5 8 2 7 13 6 9 2


์ถœ๋ ฅ

76


์˜ˆ์ œ 4

์ž…๋ ฅ

2 6 10 8 6 7 9 4
1 7 16 6 4 2 5 8
3 7 8 6 7 6 14 8
12 7 15 4 11 3 13 3


์ถœ๋ ฅ

39


My Sol

def main():
    def copy_mat(mat):
        new_mat = [[[] for _ in range(4)] for _ in range(4)]
        for i in range(4):
            for j in range(4):
                new_mat[i][j] = mat[i][j][:]
        return new_mat

    def make_init_mat():
        mat = [[[] for _ in range(4)] for _ in range(4)]
        for i in range(4):
            lst = list(map(int, input().split()))
            for j in range(4):
                mat[i][j] = [lst[2*j], lst[2*j+1]]
        return mat


    def move_shark(i, j, di, dj, acc, mat):
        mat = move_fishes(mat)
        si, sj = i, j
        maxx = acc
        while True:
            si, sj = si+di, sj+dj
            if not (0<=si<4 and 0<=sj<4): break
            if not mat[si][sj]: continue
            fish_score = mat[si][sj][0]
            nsi, nsj = dirs[mat[si][sj][1]]
            new_mat = copy_mat(mat)
            new_mat[i][j] = []
            new_mat[si][sj][0] = 17
            maxx = max(maxx, move_shark(si, sj, nsi, nsj, acc+fish_score, new_mat))
        return maxx


    def move_fishes(mat):
        def move_fish(k):
            fi, fj = positions[k]
            fd = mat[fi][fj][1]
            for d in range(fd, 9):
                di, dj = dirs[d]
                si, sj = fi+di, fj+dj
                if not (0<=si<4 and 0<=sj<4): continue
                if not mat[si][sj]:
                    mat[si][sj] = [k, d]
                    mat[fi][fj] = []
                    return
                if mat[si][sj][0]==17: continue
                else:
                    tk, td = mat[si][sj]
                    positions[tk] = (fi, fj)
                    positions[k] = (k, d)
                    mat[si][sj] = [k, d]
                    mat[fi][fj] = [tk, td]
                    return

            for d in range(1, fd):
                di, dj = dirs[d]
                si, sj = fi+di, fj+dj
                if not (0<=si<4 and 0<=sj<4): continue
                if not mat[si][sj]:
                    mat[si][sj] = [k, d]
                    mat[fi][fj] = []
                    return
                if mat[si][sj][0]==17: continue
                else:
                    tk, td = mat[si][sj]
                    positions[tk] = (fi, fj)
                    positions[k] = (k, d)
                    mat[si][sj] = [k, d]
                    mat[fi][fj] = [tk, td]
                    return

        positions = {}
        for i in range(4):
            for j in range(4):
                if not mat[i][j]: continue
                if mat[i][j][0] == 17: continue
                positions[mat[i][j][0]] = (i, j)

        for k in sorted(positions.keys()):
            move_fish(k)

        return mat


    dirs = ((),(-1,0),(-1,-1),(0,-1),(1,-1),(1,0),(1,1),(0,1),(-1,1))
    mat = make_init_mat()
    init_score = mat[0][0][0]
    mat[0][0][0] = 17
    return move_shark(0, 0, *dirs[mat[0][0][1]], init_score, copy_mat(mat))

print(main())

๋‹จ์ˆœํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ์˜€๋‹ค.

  1. ์ƒํ•˜์ขŒ์šฐ๋Œ€๊ฐ์„ ์˜ ๋ฐฉํ–ฅ์˜ ๋ธํƒ€๊ฐ’์„ dirs์— ์ €์žฅํ–ˆ๋‹ค.
  2. [๋ฒˆํ˜ธ, ์ด๋™๋ฐฉํ–ฅ]์˜ ๋ฐฐ์—ด์„ ๊ฐ๊ฐ 2์ฐจ์› ๋ฐฐ์—ด์— ๋‹ด์€, ์‚ฌ์‹ค์ƒ 3์ฐจ์› ๋ฐฐ์—ด์„ ์ตœ์ดˆ์— ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ์ด๋ฅผ make_init_mat์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.
  3. ์ƒ์–ด๊ฐ€ ์œ„์น˜ํ•˜๋Š” ๊ณณ์€ ๋ฒˆํ˜ธ๋ฅผ 17๋กœ ํ•˜์—ฌ ๋ฌผ๊ณ ๊ธฐ์˜ ์ด๋™์—์„œ 17์˜ ๋ฒˆํ˜ธ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ–ˆ๋‹ค.
  4. move_shark ํ•จ์ˆ˜์— ์™ผ์ชฝ ์ตœ์ƒ๋‹จ์˜ ๋ฌผ๊ณ ๊ธฐ์˜ ํฌ๊ธฐ์™€ ๋ฐฉํ–ฅ์„ ์ธ์ž๋กœ ๋„ฃ์–ด ์ƒ์–ด์˜ ์ด๋™์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ด๋™ ์ขŒํ‘œ์˜ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์œ„ํ•ด copy_mat ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด 3์ฐจ์› ๋ฐฐ์—ด์„ ๊นŠ์€ ๋ณต์‚ฌํ•˜์—ฌ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ–ˆ๋‹ค.
  5. move_shark ํ•จ์ˆ˜์— ์ง„์ž…ํ•˜๋ฉด ์ผ๋‹จ ์ƒ์–ด๊ฐ€ ํ•œ ๋ฒˆ ์ด๋™ํ–ˆ๋‹ค๋Š” ์ „์ œ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ”๋กœ ์ƒ์–ด ์ด๋™ ์ดํ›„์˜ ๋ฌผ๊ณ ๊ธฐ์˜ ์ด๋™์„ ํ•œ๋‹ค. ์ด๋ฅผ move_fishes ํ•จ์ˆ˜๋กœ ์š”์•ฝํ•ด, ์ด๋™ ํ›„์˜ 3์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐ›์•„ ๋‹ค์‹œ ์ €์žฅํ•œ๋‹ค.
  6. move_fishes ํ•จ์ˆ˜๋Š” ์ผ๋‹จ positions ๋ผ๋Š” dictionary๋ฅผ ๋งŒ๋“ ๋‹ค. ์ดํ›„ 3์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฐ ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ๋ฅผ key, ์ขŒํ‘œ๋ฅผ value๋กœ ์ €์žฅํ•œ๋‹ค. ์ดํ›„ ์ด key๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ๋‚ฎ์€ ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ ์ˆœ์œผ๋กœ ์ด๋™์„ ์‹œ์ž‘ํ•œ๋‹ค. ๊ฐ ๋ฌผ๊ณ ๊ธฐ๋Š” move_fish ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋™ํ•œ๋‹ค.
  7. move_fish ํ•จ์ˆ˜์—์„œ๋Š” move_fishes ํ•จ์ˆ˜์—์„œ ๊ตฌํ•œ ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ์˜ ์ขŒํ‘œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ์ €์žฅ๋œ ์ด๋™ ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์กฐํšŒํ•˜๋ฉฐ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ƒ์–ด(17)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ์กฐํšŒ๋ฅผ ํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋ฐฉํ–ฅ์ด๋ผ๋ฉด ํ•ด๋‹นํ•˜๋Š” ์ขŒํ‘œ์˜ ๋ฌผ๊ณ ๊ธฐ์™€ ์ขŒํ‘œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋Š” 3์ฐจ์› ๋ฐฐ์—ด๊ณผ position ๋ชจ๋‘์— ๋ฐ˜์˜๋œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ชจ๋“  positions์˜ ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ์— ๋Œ€ํ•ด ์ง„ํ–‰ํ•˜๋ฉด ์ดํ›„์˜ 3์ฐจ์› ๋ฐฐ์—ด์„ move_fishes ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  8. ๋‹ค์‹œ ์œ„์—์„œ move_shark ์งํ›„ move_fishes๋กœ ๋ฌผ๊ณ ๊ธฐ๋“ค์ด ์ด๋™ํ–ˆ๋‹ค๋ฉด, ์ด์ œ ๋‹ค์Œ ์ƒ์–ด์˜ ์ด๋™์„ ๊ณ ๋ คํ•ด ๋‹ค์Œ move_shark๋ฅผ ํ•  ์ฐจ๋ก€์ด๋‹ค. ์ƒ์–ด๋Š” ์ด๋™๋ฐฉํ–ฅ์˜ ๋ชจ๋“  ํฌ์ธํŠธ๋งˆ๋‹ค ์›Œํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋Œ€ํ•ด move_shark๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์‚ฌ์‹ค์ƒ ์ƒ์–ด๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๊ธฐ ์ „๊นŒ์ง€์˜ ๋ชจ๋“  ํฌ์ธํŠธ๋งˆ๋‹ค move_shark๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•˜๊ณ , ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋ฌผ๊ณ ๊ธฐ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ์ƒ์–ด์— ๋ถ€์—ฌํ•œ ๋’ค, move_shark์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉฐ ๋‹ค์Œ ์—ฐ๊ฒฐ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค์ƒ ํŠธ๋ฆฌ์‹, DFS์˜ ๊ตฌ์กฐ์ด๋‹ค.
  9. ์ด๋ ‡๊ฒŒ ํ˜„์žฌ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ดํ›„ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋ˆ„์ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฒซ move_shark์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ๊ฒฐ๊ตญ, ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋ˆ„์ ๊ฐ’์˜ ์ตœ๋Œ“๊ฐ’์ธ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ main ํ•จ์ˆ˜์—์„œ ์ถœ๋ ฅํ•œ๋‹ค.


๋‚˜๋ฆ„ 2์ฐจ์› ๋ฐฐ์—ด์„ ๊นŠ์€ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ N์ฐจ for๋ฌธ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋Š”๋งŒํผ ์†Œ์š”์‹œ๊ฐ„์„ ๊ฑฑ์ •ํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฝค๋‚˜ ๋†’์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด ์ž์ฒด๋„ 4x4๋กœ ์ž‘์€ ํฌ๊ธฐ์ด๊ณ , ํšจ์œจ์ ์œผ๋กœ ์ด๋™ ๋ฐฉํ–ฅ์„ ํƒ์ƒ‰ํ–ˆ์œผ๋ฉฐ, ๋ฌด์—‡๋ณด๋‹ค ๋งค๋ฒˆ ๋ฌผ๊ณ ๊ธฐ์˜ ์œ„์น˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ขŒํ‘œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ผ๋ถ€ ์‚ฌ์šฉํ•˜๊ณ  ์†Œ์š”์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•œ ๊ฒฐ๊ณผ ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด๋‚˜ ๋น ๋ฅธ ํ’€์ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

image


๊ฒฐ๊ณผ

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

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