ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์์ฐจ์ ์ผ๋ก ๊ตฌํํ๋ฉด ๋ง์ ์ ์๋ ๋ฌธ์ ์ด๋ค. ๋์์์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก๊ณ , ์์ด๊ฐ ์์ง์ด๋ ๊ฒ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ฉด ๋ฌธ์ ์์ ์๊ตฌํ๋ ๋ต์ ์ฐพ์ ์ ์๋ค.
- ๋์์์ด `c + 1`, ์ฆ ์ด์ ํ ์นธ ์ด๋ํ์ฌ ํด๋น ์ด ์ค ๊ฐ์ฅ ๋
๊ณผ ๊ฐ๊น์ด ํ์ ์ธ๋ฑ์ค๊ฐ ๋ฎ์ ์์ด๋ถํฐ ์ก๊ฒ ๋๋ค.
- ์ก์ ์์ด๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
- 1์ด ๋์ ์์ด๊ฐ ์ด๋ํ๋ค.
- ์์ด๋ ๊ฐ๊ฐ 1์ด์ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์๋๊ฐ 5๋ผ๋ฉด 5์นธ ์์ง์ผ ์ ์๋ค.
- ์์ด๊ฐ ์์ง์ด๋ ์ค ๊ฒฉ์ํ์ ๋ฒ์ด๋๋ค๋ฉด, ์งํ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊พผ ํ ์์ง์ธ๋ค.
- `์ → ํ`, `ํ → ์`, `์ข → ์ฐ`, `์ฐ → ์ข`๋ก ๋ณ๊ฒฝํ๋ค.
- ๋์ผํ ์์น์ ์์ด๊ฐ ์กด์ฌํ๋ค๋ฉด, ํฌ๊ธฐ๊ฐ ํฐ ์์ด๊ฐ ์์ ์์ด๋ฅผ ์ก์๋จน๋๋ค.
- ๋์์์ด ๋ชจ๋ ์ด์ ์์ด๋ฅผ ๋ค ์ก์ ๋๊น์ง, ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ ํ ์ก์ ์์ด ํฌ๊ธฐ์ ํฉ์ ๋ฐํํ๋ค.
์ฝ๋
from sys import stdin
def visitable(x, y):
return 0 <= x < r and 0 <= y < c
def catch_shark(cur_loc):
for x in range(r):
if graph[x][cur_loc]:
size = graph[x][cur_loc][SIZE]
# ์์ด๋ฅผ ์ก์์ผ๋ฉด ์ ๋ณด ์ญ์ .
graph[x][cur_loc] = 0
return size
return 0
def switch_dir(cur_dir):
if cur_dir == 0:
return 1
elif cur_dir == 1:
return 0
elif cur_dir == 2:
return 3
return 2
def move_shark():
next_graph = [[0] * c for _ in range(r)]
for x in range(r):
for y in range(c):
if not graph[x][y]:
continue
next_x, next_y, cur_speed, cur_dir, cur_size = x, y, *graph[x][y]
# speed ๋งํผ ์ด๋ํ๋๋ก ํจ.
# speed์ ํ๋ฒ์ ์์น๋ฅผ ์ฐพ๋๋ก ํ๋ฉด, Python์ผ๋ก๋ ํต๊ณผํ ์ ์๋ค.
while cur_speed > 0:
dx, dy = dirs[cur_dir]
next_x += dx
next_y += dy
# ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ๋ค๋ฉด, ์ด๋ ๊ฐ๋ฅํ ํ์ ๊ฐ์
if visitable(next_x, next_y):
cur_speed -= 1
# ๋ฐฉ๋ฌธ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, ๋ค๋ก ๊ฐ๋ฉฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ
else:
next_x -= dx
next_y -= dy
cur_dir = switch_dir(cur_dir)
graph[x][y][DIRECTION] = cur_dir
# ํ์ฌ ์์น์ ์์ด๊ฐ ์๋ ๊ฒฝ์ฐ.
if not next_graph[next_x][next_y]:
next_graph[next_x][next_y] = graph[x][y]
# ์์ด๊ฐ ์๋ค๋ฉด ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ, ๊ฐฑ์ ํจ
elif next_graph[next_x][next_y][SIZE] < cur_size:
next_graph[next_x][next_y] = graph[x][y]
return next_graph
if __name__ == "__main__":
SPEED, DIRECTION, SIZE = 0, 1, 2
dirs = ((-1, 0), (1, 0), (0, 1), (0, -1))
r, c, m = map(int, stdin.readline().split())
graph = [[0] * c for _ in range(r)]
answer = 0
for _ in range(m):
i, j, s, d, z = map(int, stdin.readline().split())
# d๋ ์ธ๋ฑ์ค์ ๋ง๊ฒ - 1
graph[i - 1][j - 1] = [s, d - 1, z]
for loc in range(c):
# ์์ด๋ฅผ ์ก์
answer += catch_shark(loc)
# ์์ด๋ฅผ ์ด๋ ์ํด
graph = move_shark()
print(answer)
์์ด์ ๋ค์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด `while`๋ฌธ์ ํตํด ๋ฐ๋ณตํ์ฌ ์ฐพ์ผ๋ฏ๋ก, `Python`์ ๊ฒฝ์ฐ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.๐ข ํ์ง๋ง `PyPy3`๋ก๋ ํต๊ณผํ ์ ์๋ค. ์์ด๊ฐ ๋ฐฉํฅ์ ์ฐพ์ ๋ ํ ๋ฒ์ ์ฐพ์ ์ ์๋๋ก ํ๋ฉด `Python`์ผ๋ก๋ ์๊ฐ ๋ด์ ํต๊ณผ๊ฐ ๊ฐ๋ฅํ๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 6087 ๋ ์ด์ ํต์ (0) | 2020.10.18 |
---|---|
๋ฐฑ์ค: 16234 ์ธ๊ตฌ ์ด๋ (0) | 2020.10.17 |
๋ฐฑ์ค: 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2020.10.14 |
๋ฐฑ์ค: 19236 ์ฒญ์๋ ์์ด (0) | 2020.10.13 |
๋ฐฑ์ค: 16236 ์๊ธฐ ์์ด (0) | 2020.10.12 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ