[BOJ] 17143. ๋‚š์‹œ์™• (๐Ÿฅ‡, ์‹œ๋ฎฌ๋ ˆ์ด์…˜)

lemythe423ยท2023๋…„ 9์›” 29์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
61/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•œ๋‹ค.
  2. ๋•…๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ์–ด๋ฅผ ์žก๋Š”๋‹ค.
  3. ์ƒ์–ด๊ฐ€ ์ด๋™ํ•œ๋‹ค

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

๋‘ ๋ฒˆ ํŠ•๊ฒจ์ ธ์„œ ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์œ„์™€ ๊ฐ™๋‹ค. ์ „์ฒด ํ–‰์˜ ๊ธธ์ด๋ฅผ C๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ํ•œ์ชฝ ๋์—์„œ ๋๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ด๋™ํšŸ์ˆ˜๋Š” C-1์ด๋‹ค. ๋‘ ๋ฒˆ ํŠ•๊ฒจ์„œ ์ œ์ž๋ฆฌ์— ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ์ชฝ ๋์—์„œ ๋๊นŒ์ง€ ๋‘ ๋ฒˆ ์ด๋™ํ•˜๋ฉด ๋˜๋ฏ€๋กœ 2x(C-1)๋งŒํผ์˜ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋œ๋‹ค. ์„ธ ๋ฒˆ, ๋„ค ๋ฒˆ ๊ฐ™์€ ์ž๋ฆฌ๋ฅผ ์˜ค๊ณ ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 2x(C-1)์„ ์ „์ฒด ์†๋„์—์„œ ๋บ€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋งŒ์„ ์ €์žฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ด์ œ ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ์šฐ๋“ค์€ ์ „๋ถ€ ์ œ๊ฑฐํ•˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด 3๊ฐ€์ง€์˜ ๋ฐฉํ–ฅ์„ฑ์„ ๋Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํ•œ ๋ฒˆ์— ๊ฐ€๋Š” ๊ฒฝ์šฐ

๊ฐ€์•ผํ•˜๋Š” ์†๋„๋กœ ๊ฐ€๋„ ๊ฒฉ์žํŒ์— ๋‹ฟ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐฉํ–ฅ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์ด๋™ํ•˜๋ฉด ๋œ๋‹ค.

๋ฐฉํ–ฅ์ด ํ•œ ๋ฒˆ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ

๊ฒฉ์žํŒ์— ๋ถ€๋”ชํ˜€ ํ•œ ๋ฒˆ ํŠ•๊ฒจ์ ธ ๋ฐฉํ–ฅ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๋‹ค. ํ˜„์žฌ ์œ„์น˜์™€ ๊ฒฉ์žํŒ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋งŒํผ์„ ์ œ์™ธํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์„œ ํŠ•๊ฒจ์ ธ์„œ ์–ด๋””๊นŒ์ง€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์œ„์น˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค. ๋ฐฉํ–ฅ ์—ญ์‹œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฉํ–ฅ์ด ๋‘ ๋ฒˆ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ

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

# ๋‚š์‹œ์™•

# ๋•…์— ๊ฐ€๊นŒ์šด ์ƒ์–ด ๋‚š์‹œ
def catch(j):
    for i in range(R):
        if arr[i][j]:
            return i
    return -1

# ์ƒ์–ด ์ด๋™ํ•  ์œ„์น˜ ์ฐพ๊ธฐ
# 3๊ฐ€์ง€ ์ด๋™ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ์ฒ˜๋ฆฌํ•œ๋‹ค
def find_pos(r, c, s, d, z):
    if d == 1:
        if s<=r:
            r -= s
        elif s<=R-1+r:
            r = s-r 
            d = 2
        else:
            r = R-1-(s-(R-1+r))
    elif d == 2:
        if s<=R-1-r:
            r += s
        elif s<=2*(R-1)-r:
            r = R-1-(s-(R-1-r))
            d = 1
        else:
            r = s-2*(R-1)+r
    elif d == 4:
        if s<=c:
            c -= s
        elif s<=C-1+c:
            c = s-c 
            d = 3
        else:
            c = C-1-(s-(C-1+c))
    elif d == 3:
        if s<=C-1-c:
            c += s
        elif s<=2*(C-1)-c:
            c = C-1-(s-(C-1-c))
            d = 4
        else:
            c = s-2*(C-1)+c
    return r, c, s, d, z

# ์ƒ์–ด ์ด๋™
def move(arr):
    tmp = [[[] for _ in range(C)] for _ in range(R)]
    for i in range(R):
        for j in range(C):
            if arr[i][j]:
                r, c, s, d, z = find_pos(i, j, *arr[i][j])
                # ๋งŒ์•ฝ ์ƒ์–ด๊ฐ€ ์ด๋ฏธ ์นธ์— ์กด์žฌํ•˜๋Š”๋ฐ ํ˜„์žฌ ๋“ค์–ด์˜ฌ ์ƒ์–ด๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๊ธฐ
                if tmp[r][c] and tmp[r][c][2] > z:
                    continue
                tmp[r][c] = [s, d, z]
    return tmp

R, C, M = map(int, input().split())
arr = [[[] for _ in range(C)] for _ in range(R)]
for _ in range(M):
    r, c, s, d, z = map(int, input().split())
    if d in (1, 2):
        s %= 2*(R-1)
    else:
        s %= 2*(C-1)
    arr[r-1][c-1] = [s, d, z]

res = 0
for j in range(C):
    i = catch(j)
    if i != -1:
        res += arr[i][j][2]
        arr[i][j] = []
    arr = move(arr)

print(res)
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€