๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[BAEKJOON python] 19236_์ฒญ์†Œ๋…„ ์ƒ์–ด ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/BAEKJOON

[BAEKJOON python] 19236_์ฒญ์†Œ๋…„ ์ƒ์–ด

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

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

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

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

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

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ 4๊ฐœ์˜ ์ค„์— ๊ฐ ์นธ์˜ ๋“ค์–ด์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ •๋ณด
    ๋ฌผ๊ณ ๊ธฐ์˜ ์ •๋ณด๋Š” ๋‘ ์ •์ˆ˜ ai, bi
    ai๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฒˆํ˜ธ, bi๋Š” ๋ฐฉํ–ฅ (1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ↑, โ†–, ←, โ†™, ↓, โ†˜, →, โ†—)
import copy

board = [[] for _ in range(4)]

# ๋ฌผ๊ณ ๊ธฐ ๋ฐฉํ–ฅ 1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ↑, โ†–, ←, โ†™, ↓, โ†˜, →, โ†—
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, -1, -1, -1, 0, 1, 1, 1]

for i in range(4):
    data = list(map(int, input().split()))
    fish = []
    # ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ, ๋ฐฉํ–ฅ
    for j in range(4):
        fish.append([data[2 * j],
                     data[2 * j + 1] - 1])  # ๋ฐฉํ–ฅ์—์„œ -1 ์ด์œ ๋Š” : ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ผ ใ…Ž
    # ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฒˆํ˜ธ, ๋ฐฉํ–ฅ์„ ์ €์žฅ
    board[i] = fish

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


def dfs(sx, sy, score, board):
    global max_score
    # ๋จน์€ ๋ฌผ๊ณ ๊ธฐ์˜ ๋ฒˆํ˜ธ๋กœ ์ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๊ณ 
    score += board[sx][sy][0]
    # ์ƒ์–ด๊ฐ€ ๋จน์€ ๋ฌผ๊ณ ๊ธฐ ๋ฒˆํ˜ธ์˜ ํ•ฉ์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ 
    max_score = max(score, max_score)
    board[sx][sy][0] = 0

    # 1) ๋ฌผ๊ณ ๊ธฐ ์›€์ง์ž„
    for f in range(1, 17):
        f_x, f_y = -1, -1
        for x in range(4):
            for y in range(4):
                # 1๋ถ€ํ„ฐ 16๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๋ฌผ๊ณ ๊ธฐ ์ด๋™
                if board[x][y][0] == f:
                    f_x, f_y = x, y
                    break
        if f_x == -1 and f_y == -1:
            continue

        # ๋ฌผ๊ณ ๊ธฐ ๋ฐฉํ–ฅ
        f_d = board[f_x][f_y][1]
        for i in range(8):
            # ๋ฐ˜์‹œ๊ณ„๋กœ 45๋„์”ฉ
            nd = (f_d + i) % 8
            nx = f_x + dx[nd]
            ny = f_y + dy[nd]
            # ๊ฒฉ์žํŒ์„ ์•ˆ ๋„˜์–ด๊ฐ”๊ณ , ์ƒ์–ด์™€ ๊ฐ™์€ ์œ„์น˜๋ผ๋ฉด ๊ณ„์† ๋Œ๋ ค~
            if not (0 <= nx < 4 and 0 <= ny < 4) or (nx == sx and ny == sy):
                continue
            # ๋ฐฉํ–ฅ ๊ฐฑ์‹ 
            board[f_x][f_y][1] = nd
            # ์ด๋™ํ•œ ์• ๋ž‘, ์ด๋™ํ•  ์• ๋ž‘ ์œ„์น˜ ๋ฐ”๊พธ๊ธฐ
            board[f_x][f_y], board[nx][ny] = board[nx][ny], board[f_x][f_y]
            break

    # 2) ์ƒ์–ด ์ด๋™ -> ๋จน์Œ
    s_d = board[sx][sy][1]  # ์ƒ์–ด๊ฐ€ ์œ„์น˜ํ•œ ๊ณณ = ๋ฌผ๊ณ ๊ธฐ ์œ„์น˜ (๋ฐฉํ–ฅ)
    for i in range(1, 5):
        nx = sx + dx[s_d] * i
        ny = sy + dy[s_d] * i
        if (0 <= nx < 4 and 0 <= ny < 4) and board[nx][ny][0] > 0:
            # ์ƒ์–ด ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ตœ๋Œ€๊ฐ’ ๊ฐฑ์‹ 
            dfs(nx, ny, score, copy.deepcopy(board))


dfs(0, 0, 0, board)
print(max_score)

์˜ˆ์ œ ์ž…๋ ฅ

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

 

 

 

์žฌ๋ฐŒ๋Š”๋ฐ?

์™œ ํ˜ผ์ž ๋ชปํ• ๊นŒ ใ…‹ใ…‹ใ…‹

์•„์ง. ๋ถ„์„ ๋ฐฉ๋ฒ•์ด ์–ด๋ ค์›€ ใ… 

https://developer-ellen.tistory.com/68

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹นใ…Žใ…Ž

728x90
๋ฐ˜์‘ํ˜•
Comments