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

[BAEKJOON python] 23290_๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ๋ณต์ œ ๋ณธ๋ฌธ

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

[BAEKJOON python] 23290_๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ๋ณต์ œ

์ง•์ง•์•ŒํŒŒ์นด 2023. 4. 8. 00:04
728x90
๋ฐ˜์‘ํ˜•
๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ๋ณต์ œ
4 × 4 ํฌ๊ธฐ์˜ ๊ฒฉ์ž์—์„œ ์—ฐ์Šต
(r, c)๋Š” ๊ฒฉ์ž์˜ rํ–‰ c์—ด
๊ฒฉ์ž์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ— ์นธ์€ (1, 1)์ด๊ณ , ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋žซ ์นธ์€ (4, 4)

๊ฒฉ์ž์—๋Š” ๋ฌผ๊ณ ๊ธฐ M๋งˆ๋ฆฌ
๋ฌผ๊ณ ๊ธฐ๋Š” ๊ฒฉ์ž์˜ ์นธ ํ•˜๋‚˜์— ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋™ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
์ด๋™ ๋ฐฉํ–ฅ์€ 8๊ฐ€์ง€ ๋ฐฉํ–ฅ(์ƒํ•˜์ขŒ์šฐ, ๋Œ€๊ฐ์„ ) ์ค‘ ํ•˜๋‚˜
๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ์ƒ์–ด๋Š” ๊ฒฉ์ž์˜ ํ•œ ์นธ์— ๋“ค์–ด๊ฐ€์žˆ์Œ
๋‘˜ ์ด์ƒ์˜ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๊ฐ™์€ ์นธ์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๊ฐ™์€ ์นธ์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ

์ƒ์–ด์˜ ๋งˆ๋ฒ• ์—ฐ์Šต ํ•œ ๋ฒˆ
1) ์ƒ์–ด๊ฐ€ ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ์—๊ฒŒ ๋ณต์ œ ๋งˆ๋ฒ•์„ ์‹œ์ „
๋ณต์ œ ๋งˆ๋ฒ•์€ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, 5) ์—์„œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋ณต์ œ๋˜์–ด ์นธ์— ๋‚˜ํƒ€๋‚จ
2) ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ํ•œ ์นธ ์ด๋™
    ์ƒ์–ด๊ฐ€ ์žˆ๋Š” ์นธ, ๋ฌผ๊ณ ๊ธฐ์˜ ๋ƒ„์ƒˆ๊ฐ€ ์žˆ๋Š” ์นธ, ๊ฒฉ์ž์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์นธ์œผ๋กœ๋Š” ์ด๋™ํ•  ์ˆ˜ ์—†์Œ
    ๊ฐ ๋ฌผ๊ณ ๊ธฐ๋Š” ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด๋™ ๋ฐฉํ–ฅ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ํ–ฅํ•  ๋•Œ๊นŒ์ง€ ๋ฐฉํ–ฅ์„ 45๋„ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „
    ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์ด ์—†์œผ๋ฉด ์ด๋™์„ ํ•˜์ง€ ์•Š์Œ
3) ์ƒ์–ด๊ฐ€ ์—ฐ์†ํ•ด์„œ 3์นธ ์ด๋™
    ์ƒ์–ด๋Š” ํ˜„์žฌ ์นธ์—์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ ์ด๋™
    ์ด๋™ํ•˜๋Š” ์นธ ์ค‘์— ๊ฒฉ์ž์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์นธ์ด ์žˆ์œผ๋ฉด, ๊ทธ ๋ฐฉ๋ฒ•์€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ด๋™ ๋ฐฉ๋ฒ•
    ์ด๋™ํ•˜๋Š” ์ค‘์— ์ƒ์–ด๊ฐ€ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฐ™์€ ์นธ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ๋Š” ๊ฒฉ์ž์—์„œ ์ œ์™ธ๋˜๋ฉฐ, ์ œ์™ธ๋˜๋Š” ๋ชจ๋“  ๋ฌผ๊ณ ๊ธฐ๋Š” ๋ฌผ๊ณ ๊ธฐ ๋ƒ„์ƒˆ๋ฅผ ๋‚จ๊น€
    ๊ฐ€๋Šฅํ•œ ์ด๋™ ๋ฐฉ๋ฒ• ์ค‘์—์„œ ์ œ์™ธ๋˜๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™
    ๊ทธ๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉ
4) ๋‘ ๋ฒˆ ์ „ ์—ฐ์Šต์—์„œ ์ƒ๊ธด ๋ฌผ๊ณ ๊ธฐ์˜ ๋ƒ„์ƒˆ๊ฐ€ ๊ฒฉ์ž์—์„œ ์‚ฌ๋ผ์ง
5) 1) ์—์„œ ์‚ฌ์šฉํ•œ ๋ณต์ œ ๋งˆ๋ฒ•์ด ์™„๋ฃŒ
    ๋ชจ๋“  ๋ณต์ œ๋œ ๋ฌผ๊ณ ๊ธฐ๋Š” 1)์—์„œ์˜ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ๊ทธ๋Œ€๋กœ ๊ฐ–๊ฒŒ ๋จ

๊ฒฉ์ž์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์œ„์น˜, ๋ฐฉํ–ฅ ์ •๋ณด์™€ ์ƒ์–ด์˜ ์œ„์น˜, ์—ฐ์Šต ํšŸ์ˆ˜ S
S๋ฒˆ ์—ฐ์Šต์„ ๋ชจ๋‘ ๋งˆ์ณค์„๋•Œ, ๊ฒฉ์ž์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ˆ˜

์ฒซ์งธ ์ค„์— ๋ฌผ๊ณ ๊ธฐ์˜ ์ˆ˜ M, ์ƒ์–ด๊ฐ€ ๋งˆ๋ฒ•์„ ์—ฐ์Šตํ•œ ํšŸ์ˆ˜ S
๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ •๋ณด fx, fy, d
    (fx, fy)๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์œ„์น˜๋ฅผ ์˜๋ฏธํ•˜๊ณ , d๋Š” ๋ฐฉํ–ฅ
    1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ←, โ†–, ↑, โ†—, →, โ†˜, ↓, โ†™
๋งˆ์ง€๋ง‰ ์ค„์—๋Š” sx, sy๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ƒ์–ด๊ฐ€ (sx, sy)์— ์žˆ์Œ
๊ฒฉ์ž ์œ„์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ˆ˜๊ฐ€ ํ•ญ์ƒ 1,000,000 ์ดํ•˜์ธ ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง
# ๋ณต์ œ -> ๋ฌผ๊ณ ๊ธฐ ์ด๋™ -> ์ƒ์–ด์˜ ์ด๋™ -> ๋ณต์ œ๋งˆ๋ฒ•
# 1) ๋ฌผ๊ณ ๊ธฐ ์›€์ง์ž„
def move_fish(arr):
    ret = [[[] for _ in range(4)] for _ in range(4)]
    for x in range(4):
        for y in range(4):
            while arr[x][y]:
                d = arr[x][y].pop()
                for i in range(d, d - 8, -1):
                    i %= 8
                    nx, ny = x + delta[i][0], y + delta[i][1]
                    # ์ƒ์–ด ์กด์žฌ X, ๋ฒ”์œ„ ์•ˆ๋„˜์Œ, ๋ƒ„์ƒˆ ์•ˆ๋‚จ X
                    if (
                            nx, ny
                    ) != shark and 0 <= nx < 4 and 0 <= ny < 4 and not smell[
                            nx][ny]:
                        ret[nx][ny].append(i)
                        break
                else:
                    ret[x][y].append(d)
    return ret


# 2) ์ƒ์–ด ์›€์ง์ž„
def move_shark(s):
    x, y = s
    q = []
    # ํ˜„์žฌ์ขŒํ‘œ, ๋ฐฉ๋ฌธ์ขŒํ‘œ, ๋ฐฉํ–ฅ์ ์ˆ˜, ์ด๊ฐฏ์ˆ˜,
    q.append((x, y, set(), '', 0))
    for _ in range(3):
        for _ in range(len(q)):
            x, y, visited, dir_score, cnt = q.pop(0)
            for i in range(1, 5):
                nx, ny = x + s_delta[i][0], y + s_delta[i][1]
                if 0 <= nx < 4 and 0 <= ny < 4:
                    if (nx, ny) in visited:
                        q.append((nx, ny, visited, dir_score + str(i), cnt))
                    else:
                        q.append((nx, ny, visited | {(nx, ny)},
                                  dir_score + str(i), cnt + len(tmp[nx][ny])))
    q.sort(key=lambda x: (x[4], -int(x[3])))
    x, y, visited, dir_score, cnt = q[-1]
    for i, j in visited:
        if tmp[i][j]:
            tmp[i][j].clear()
            smell[i][j] = 3
    return (x, y)


m, s = map(int, input().split())
fishes = [tuple(map(lambda x: int(x) - 1, input().split())) for _ in range(m)]

# 1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ←, โ†–, ↑, โ†—, →, โ†˜, ↓, โ†™
delta = [(0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1)]
s_delta = [0, (-1, 0), (0, -1), (1, 0), (0, 1)]

matrix = [[[] for _ in range(4)] for _ in range(4)]
for x, y, d in fishes:
    matrix[x][y].append(d)

shark = tuple(map(lambda x: int(x) - 1, input().split()))
smell = [[0] * 4 for _ in range(4)]

for _ in range(s):
    # ๋ฌผ๊ณ ๊ธฐ ๋ณต์ œ
    tmp = [[k[:] for k in row] for row in matrix]
    # ๋ฌผ๊ณ ๊ธฐ ํ•œ์นธ ์ด๋™
    # ์ด๋™ ํ•  ๋•Œ๊นŒ์ง€ delta -1
    # ๋ฌผ๊ณ ๊ธฐ ๋ƒ„์ƒˆ ์žˆ๊ฑฐ๋‚˜ ์ƒ์–ด ์žˆ๊ฑฐ๋‚˜, ๊ฒฉ์ž ํŒ ๋„˜์–ด๊ฐ€๋ฉด ์ด๋™ ๋ถˆ๊ฐ€
    tmp = move_fish(tmp)
    # ์ƒ์–ด ์—ฐ์† 3์นธ ์ด๋™
    # ์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ํ•œ ์นธ ์ด๋™ ๊ฐ€๋Šฅ
    # ๋ฒ”์œ„ ๋ฒ—์–ด๋‚˜๋ฉด ๋ถˆ๊ฐ€๋Šฅ
    shark = move_shark(shark)
    # ์ด๋™ ์ค‘ ๋ฌผ๊ณ ๊ธฐ ์žˆ๋Š” ๊ณณ์œผ๋กœ ๊ฐ€๋ฉด ๋ฌผ๊ณ ๊ธฐ ์—†์–ด์ง -> ๋ƒ„์ƒˆ ๋‚จ๊น€
    # ๋งŽ์ด ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ
    # ์œ„ 1, ์ขŒ 2, ์•„๋ž˜ 3, ์˜ค๋ฅธ 4 ์ˆœ์œผ๋กœ ์ด๋™
    for i in range(4):
        for j in range(4):
            if smell[i][j]:
                smell[i][j] -= 1
    # ๋ฌผ๊ณ ๊ธฐ ๋ฐฐ์—ด tmp fishes ์— ๋”ํ•ด์คŒ
    for i in range(4):
        for j in range(4):
            matrix[i][j] += tmp[i][j]
answer = 0
for i in range(4):
    for j in range(4):
        answer += len(matrix[i][j])

print(answer)

์˜ˆ์ œ ์ž…๋ ฅ

5 1
4 3 5
1 3 5
2 4 2
2 1 6
3 4 4
4 2

์˜ˆ์ œ ์ถœ๋ ฅ

9

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