ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
19237๋ฒ: ์ด๋ฅธ ์์ด
์ฒซ ์ค์๋ N, M, k๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) ๊ทธ ๋ค์ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฒฉ์์ ๋ชจ์ต์ด ์ฃผ์ด์ง๋ค. 0์ ๋น์นธ์ด๊ณ , 0์ด ์๋ ์ x๋ x๋ฒ ์์ด๊ฐ ๋ค์ด์๋ ์นธ์ ์๋ฏธ
www.acmicpc.net
๋ฌธ์ ํ์ด
์์ด์ ์์น์ ์์ด์ ๋ฐฉํฅ์ด ์ฃผ์ด์ง๋ค. ์ด๋ ๊ฐ ์์ด๋ค์ ์ด๋ํ๋ฉฐ ๋์๋ฅผ ๋ฟ๋ฆฌ๊ณ , ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฟ๋ ค์ง ๋์๋ K์ด๊ฐ ์ง๋๋ฉด ์ฌ๋ผ์ง๋ค. ์ด๋ ๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด 1) ๋์ ๋ฟ๋ฆฌ๊ธฐ, 2) ์์ด ์ด๋, 3) ์๊ฐ์ ๋ฐ๋ฅธ ๋์ ๊ฐ์๋ก ๋๋์ด ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ฅผ ํ๋ฉด์ 3๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ง์ดํ๋ฉฐ ํธ๋๋ฐ ์๊ฐ์ด ์ง์ฐ๋์๋ค.
- ๋์ผํ ์๋ฆฌ์ ์ฌ๋ฌ ๋ง๋ฆฌ์ ์์ด๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์ด๋ง ๋จ๋๋ค.
- ์ฒ์์๋ ๋์ผํ ์๋ฆฌ์ ๊ฒฝ์ฐ append๋ฅผ ํด์ฃผ๋ฉด์ ์ฒดํฌํ๊ฑฐ๋ ์์ด์ ๋ฒํธ๋ฅผ ๋น๊ต ์ฐ์ฐ์ ํตํด ํ๋๋ง ๋จ๋๋ก ํด๋ณผ ์๊ฐ์ด์๋ค.
- ํ์ง๋ง, ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์ด๋ถํฐ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด, ์์์ ์ฒ๋ฆฌ๋ ์ผ์ด๋ค!
- ์, ํ, ์ข, ์ฐ์ ์ฐ์ ์์๋ฅผ ์ค๋๋ง์ ์ฃผ๋ค ๋ณด๋ x, y ์์ง์ ์ขํ์์ผ๋ก ์๊ฐํ๋ค.
- ๋์ ์ด ์๋์ง, ํ๋ ฌ์ ์ขํ๊ฐ ์๋ x, y ์ขํ ์์ผ๋ก ์๊ฐํ๊ณ `dirs = ((0, -1), (0, 1), (-1, 0), (1, 0))`์ผ๋ก ์ด๊ธฐํํด๋๊ณ ๋ฌธ์ ์ ์ ๊ทผํ๊ณ ์์๋ค. ์ณ์ ๋ต์ด ์ ๋์ฌ ์๋ฐ์...๐ซ
- ๋ด๊ฐ 3์ฐจ์ ๋ฐฐ์ด๋ก ์ค๊ณ๋ฅผ ํ๊ณ , ๊ฐ ์ธ๋ฑ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ฐฉ๊ฐ ํ์ฌ ๋๋ฒ๊น ํ๋๋ฐ ์๊ฐ์ ์ฐ๊ณ ์์๋ค...
์ฝ๋
from sys import stdin
SHARK, SCENT = 0, 1
def visitable(r, c):
return 0 <= r < N and 0 <= c < N
def simulation():
# ๋์ ๋ฟ๋ฆฌ๊ธฐ.
for s_idx, values in enumerate(sharks):
if values is None:
continue
r, c, _ = values
# ๋์๋ฅผ ๋ฟ๋ฆด ์ ์๋ ๊ฒฝ์ฐ.
if board[r][c] is None or board[r][c][SHARK] == s_idx:
board[r][c] = [s_idx, K]
else:
sharks[s_idx] = None
# ์์ด ์ด๋
for s_idx, values in enumerate(sharks):
if values is None:
continue
r, c, cur_dir = values
# ๋น์นธ์ผ๋ก ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
for next_dir in priority[s_idx][cur_dir]:
dr, dc = dirs[next_dir]
next_r, next_c = r + dr, c + dc
if visitable(next_r, next_c) and board[next_r][next_c] is None:
sharks[s_idx] = [next_r, next_c, next_dir]
break
# ์์ ์ ๋์๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ
else:
for next_dir in priority[s_idx][cur_dir]:
dr, dc = dirs[next_dir]
next_r, next_c = r + dr, c + dc
if visitable(next_r, next_c) and board[next_r][next_c][SHARK] == s_idx:
sharks[s_idx] = [next_r, next_c, next_dir]
break
# ์์ 2๊ฐ์ง๊ฐ ์๋๋ผ๋ฉด ์ด๋ ๋ถ๊ฐ.
else:
sharks[s_idx] = None
# ๋์ ๊ฐ์
for r in range(N):
for c in range(N):
if board[r][c] is None:
continue
board[r][c][SCENT] -= 1
if board[r][c][SCENT] == 0:
board[r][c] = None
if __name__ == "__main__":
dirs = ((-1, 0), (1, 0), (0, -1), (0, 1))
N, M, K = map(int, stdin.readline().split())
board = [list(map(int, stdin.readline().split())) for _ in range(N)]
cur_shark_dirs = list(map(int, stdin.readline().split())) # ๊ฐ ์์ด์ ๋ฐฉํฅ
sharks = [0] * M
for i in range(N):
for j in range(N):
if board[i][j] != 0:
# ์์น, ๋ฐฉํฅ์ ์ธ๋ฑ์ค์ ๋ง๊ฒ ๊ฐ์
sharks[board[i][j] - 1] = [i, j, cur_shark_dirs[board[i][j] - 1] - 1]
board[i][j] -= 1
board[i][j] = None
priority = [[[0] for _ in range(4)] for _ in range(M)]
for shark_idx in range(M):
for p_idx in range(4):
# ์ฐ์ ์์ ๋ฐฉํฅ์ dirs ์ธ๋ฑ์ค์ ๋ง๊ฒ ๊ฐ์
priority[shark_idx][p_idx] = [p - 1 for p in list(map(int, stdin.readline().split()))]
for cur_time in range(-1, 1001):
# 1๋ฒ ์์ด๋ง ๋จ๋ ๊ฒฝ์ฐ
if sharks.count(None) == M - 1:
print(cur_time)
exit(0)
else:
simulation()
else:
print(-1)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 17822 ์ํ ๋๋ฆฌ๊ธฐ (0) | 2021.04.19 |
---|---|
๋ฐฑ์ค: 17837 ์๋ก์ด ๊ฒ์ 2 (0) | 2021.04.18 |
๋ฐฑ์ค: 17779 ๊ฒ๋ฆฌ๋ฉ๋๋ง 2 (0) | 2021.04.16 |
๋ฐฑ์ค: 19238 ์คํํธ ํ์ (0) | 2021.04.15 |
๋ฐฑ์ค: 20058 ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ (2) | 2021.04.14 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ