<λ¬Έμ λ§ν¬>
https://www.acmicpc.net/problem/20057
20056λ²: λ§λ²μ¬ μμ΄μ νμ΄μ΄λ³Ό
첫째 μ€μ N, M, Kκ° μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Mκ°μ μ€μ νμ΄μ΄λ³Όμ μ λ³΄κ° ν μ€μ νλμ© μ£Όμ΄μ§λ€. νμ΄μ΄λ³Όμ μ 보λ λ€μ― μ μ ri, ci, mi, si, diλ‘ μ΄λ£¨μ΄μ Έ μλ€. μλ‘ λ€λ₯Έ λ νμ΄μ΄λ³Όμ μμΉ
www.acmicpc.net
<νμ΄ μ λ΅>
- νΉλ³ν μκ³ λ¦¬μ¦μ νμλ‘ νμ§ μλ ꡬν λ¬Έμ μ΄λ€.
- ꡬνν΄μΌν μμλ ν¬κ² λͺ¨λλ°λμ νμ°κ³Ό ν λ€μ΄λμ μ΄λμ΄λ€.
- λͺ¨λλ°λμ νμ°
- λͺ¨λλ°λμ΄ νμ°λλ μ’νλ λΉμ¨μ λμ λ리 ννλ‘ λ΄μμ€λ€. λ λλν λ°©λ²λ μμ κ±° κ°μλ° λλ κ·Έλ₯ λͺ¨λ μ’νλ λΉμ¨μ μΌμΌμ΄ μ λ ₯νλ€ μ΄λ΄ κ²½μ° μ€νκ° μμΌλ©΄ λλ²κΉ μ λ°κ²¬νκΈ° λ§€μ° νλλ μ£Όμνμ
- λμ λ리μ μ μ₯ν΄λ μ’νλ λΉμ¨λλ‘ λͺ¨λλ°λμ μ΄λ μν€λ©΄μ λ²μλ₯Ό λ²μ΄λλ λͺ¨λκ° μμ λλ§λ€ μμ€λ λͺ¨λμ μμ λν΄μ€λ€.
- ν λ€μ΄λμ μ΄λ
- ν λ€μ΄λκ° μ΄λνλ κ·μΉμ νμ ν΄μΌνλλ° μ΄κ² μκ°λ³΄λ€ μ‘°κΈ λ³΅μ‘νλ€
- μ€μμμ μμν΄μ νμ¬ λ°©ν₯μΌλ‘ kλ² μ΄λνλ©΄ λ°©ν₯μ΄ λ°λκ³ λ°©ν₯μ΄ λ λ² λ°λλ©΄ kκ° 1μ© μ¦κ°νλ κ·μΉμ΄λ€. κΈλ‘ μ€λͺ νλ μ’ λ³΅μ‘νλ° μ§μ κ·Έλ¦ΌμΌλ‘ κ·Έλ €λ³΄λ©΄ μ΄ν΄κ° μ½λ€. ν·κ°λ¦¬λ©΄ μ°μ΅μΌλ‘ λΉ λ¦¬μ€νΈμ 1λΆν° μ±μλκ°λ μ½λλ₯Ό μ§λ΄λ λμμ΄ λλ€.
- μ κ·μΉλλ‘ μ΄λνλ©΄μ λͺ¨λλ°λμ΄ μμΌλ©΄ λͺ¨λλ°λμ κ·μΉλλ‘ νμ μμΌμ€λ€.
- ν λ€μ΄λμ μ΄λμ ꡬννλ κ² μκ°λ³΄λ€ 볡μ‘νλ λ¬Έμ μ΄λ€.
- μ²μμ λ°©ν₯ μ 보 μ λ ₯ν λ μ€νλμ§ μλλ‘ κΌ μ£Όμν΄μΌνκ³ λ€λ₯Έ κ³ μλΆλ€ νμ΄ λ³΄λκΉ μμ U, D, L, R κ°μ΄ λ°©ν₯μ λ¬Έμ ννλ‘ μ μ₯ν΄μ μ΄μ©νλλ° μ΄λ κ² λ¬Έμ μ μ λ ₯ν΄μΌν μ’νκ° λ§μ ν·κ°λ¦¬κΈ° μ¬μ΄ κ²½μ°μλ ν΄λΉ λ°©λ²λ μ’μ κ² κ°λ€.
<μ λ΅ μ½λ>
import sys, os, io, atexit
input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))
# 220921 20057 λ§λ²μ¬ μμ΄μ ν λ€μ΄λ
# μ λ΅μ½λ
# directions: λͺ¨λλ°λ νμ° μ’νμ ν΄λΉ μ’νμ λͺ¨λ λΉμ¨
directions = {
0 : [(-2, 0, 2), (-1, -1, 10), (-1, 0, 7), (-1, 1, 1), (0, -2, 5), (1, -1, 10), (1, 0, 7), (1, 1, 1), (2, 0, 2), (0, -1)],
1 : [(-1, -1, 1), (-1, 1, 1), (0, -2, 2), (0, -1, 7), (0, 1, 7), (0, 2, 2), (1, -1, 10), (1, 1, 10), (2, 0, 5), (1, 0)],
2 : [(-2, 0, 2), (-1, -1, 1), (-1, 0, 7), (-1, 1, 10), (0, 2, 5), (1, -1, 1), (1, 0, 7), (1, 1, 10), (2, 0, 2), (0, 1)],
3 : [(-2, 0, 5), (-1, -1, 10), (-1, 1, 10), (0, -2, 2), (0, -1, 7), (0, 1, 7), (0, 2, 2), (1, -1, 1), (1, 1, 1), (-1, 0)]
}
# torando: ν λ€μ΄λ ν¨μ
def tornado (r, c, sand, d):
# κΈλ‘λ² λ³μ μ μΈ
global lost
# left: λ¨μμλ λͺ¨λμ μ
left = sand
# ν λ€μ΄λλ₯Ό μμ ν μΉΈμ λͺ¨λλ 0μ΄ λλ€.
arr[r][c] = 0
# λͺ¨λκ° λΉμ¨λλ‘ ν΄λΉ μ’νλ‘ νμ°νλ€
for direction in directions[d][:-1]:
nr = r + direction[0]
nc = c + direction[1]
# μλ λͺ¨λμ μ κ°μ
left -= (sand * direction [2]) // 100
# λ²μλ₯Ό λ²μ΄λμ§ μμΌλ©΄ ν΄λΉ μ’νμ λͺ¨λλ₯Ό νμν΄μ€λ€.
if 0 <= nr < N and 0 <= nc < N:
arr[nr][nc] += (sand *direction[2]) // 100
# λ²μλ₯Ό λ²μ΄λλ λͺ¨λλ μμ€λλ€.
else:
lost += (sand * direction[2]) // 100
# nr, nc: νμ°λκ³ λ¨μ λͺ¨λκ° μμΉν μ’ν
nr = r + directions[d][-1][0]
nc = c + directions[d][-1][1]
# λ²μλ₯Ό λ²μ΄λμ§ μμΌλ©΄ ν΄λΉ μ’νμ λͺ¨λ νμ
if 0 <= nr < N and 0 <= nc < N:
arr[nr][nc] += left
# λ²μ λ²μ΄λλ©΄ μμ€
else:
lost += left
return
# N: λ°°μ΄μ ν¬κΈ°, arr: λͺ¨λ λ°°μ΄
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
# lost: 격μ λ°μΌλ‘ λκ° μμ€λ λͺ¨λμ μ
lost = 0
# λΈν νμ λ°©ν₯ μ€μ
dr = [0, 1, 0, -1]
dc = [-1, 0, 1, 0]
# r, c: μμ μμΉ, d: ν λ€μ΄λ μ΄λ λ°©ν₯
r = N // 2
c = N // 2
d = 0
# change: ν΄λΉ λ°©ν₯μΌλ‘ λͺ λ² μ΄λν΄μΌ λ°©ν₯μ΄ λ°λλμ§λ₯Ό λνλ΄λ λ³μ
change = 1
# cnt: ν΄λΉ λ°©ν₯μΌλ‘ μ΄λν νμ
cnt = 0
# flag_cnt: change λ³μμ μ¦κ°λ₯Ό λνλ΄λ λ³μ
flag_cnt = 0
# μ€μμμλΆν° ν λ€μ΄λ μ΄λ
for i in range(N*N - 1):
# ν΄λΉ λ°©ν₯μΌλ‘ μ΄λν νμλ₯Ό μΈμ€λ€.
cnt += 1
# ν λ€μ΄λ μ΄λ
r += dr[d]
c += dc[d]
# μ΄λν μμΉμ λͺ¨λλ°λμ΄ μμΌλ©΄ ν λ€μ΄λ μν
if arr[r][c]:
tornado(r, c, arr[r][c], d)
# changeλ§νΌ μ΄λ νμΌλ©΄ λ°©ν₯μ λ°κΏμ€λ€.
if cnt == change:
d = (d + 1) % 4
# cnt: μ΄κΈ°ν
cnt = 0
# flag_cntλ₯Ό μΈμ€λ€.
flag_cnt += 1
# flag_cntκ° 2κ° λλ©΄ changeλ₯Ό 1 λλ €μ£Όκ³ flag_cntλ₯Ό μ΄κΈ°ν ν΄μ€λ€.
if flag_cnt == 2:
change += 1
flag_cnt = 0
print(lost)
'β Problem_Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1766 λ¬Έμ μ§ (Python/νμ΄μ¬) (0) | 2022.10.06 |
---|---|
[λ°±μ€] 1662 μμΆ (Python/νμ΄μ¬) (1) | 2022.10.05 |
[λ°±μ€] 2437 μ μΈ (Python/νμ΄μ¬) (1) | 2022.10.03 |
[λ°±μ€] 20056 λ§λ²μ¬ μμ΄μ νμ΄μ΄λ³Ό (Python/νμ΄μ¬) (0) | 2022.10.03 |
[λ°±μ€] 14621 λλ§ μλλ μ°μ (Python/νμ΄μ¬) (1) | 2022.10.02 |
λκΈ