https://www.acmicpc.net/problem/17143
접근
따로 복잡한 알고리즘 없이 문제 구현만 하면 되는 문제였다.
낚시꾼이 n번 위치로 이동하여 맨 위에 있는 상어를 잡는 move_fisherman 함수와 상어들이 자신의 이동 속도와 방향으로 이동한 후 가장 큰 상어만 남기는 move_sharks 함수를 만들어 낚시꾼이 이동할 때마다 실행해줌으로써 문제를 해결할 수 있었다.
코드
from copy import deepcopy
R, C, M = map(int, input().split())
matrix = [[0 for _ in range(C)] for __ in range(R)]
bowl = deepcopy(matrix)
for _ in range(M):
r, c, s, d, z = map(int, input().split())
bowl[r - 1][c - 1] = (z, s, d - 1)
def move_fisherman(n):
catch = 0
for i in range(R):
if bowl[i][n] and not catch:
catch = bowl[i][n][0]
bowl[i][n] = 0
return catch
def move_sharks(bowl):
new_bowl = deepcopy(matrix)
for r in range(R):
for c in range(C):
if bowl[r][c]:
z, s, d = bowl[r][c]
nr, nc, nd = move_one_shark(r, c, s, d)
if new_bowl[nr][nc] == 0:
new_bowl[nr][nc] = (z, s, nd)
else:
nbz, nbs, nbd = new_bowl[nr][nc]
if nbz > z:
continue
else:
new_bowl[nr][nc] = (z, s, nd)
return new_bowl
def move_one_shark(r, c, s, d):
if d == 0:
move_val = s % (2 * (R - 1))
if 0 <= r - move_val < R:
r = r - move_val
elif 0 <= r - move_val + R - 1 < R:
r = move_val - r
d = 1
else:
r = 2 * (R - 1) + r - move_val
elif d == 1:
move_val = s % (2 * (R - 1))
if 0 <= r + move_val < R:
r = r + move_val
elif 0 <= r + move_val - R + 1 < R:
r = 2 * (R - 1) - move_val - r
d = 0
else:
r = r + move_val - 2 * (R - 1)
elif d == 2:
move_val = s % (2 * (C - 1))
if 0 <= c + move_val < C:
c = c + move_val
elif 0 <= c + move_val - C + 1 < C:
c = 2 * (C - 1) - move_val - c
d = 3
else:
c = c + move_val - 2 * (C - 1)
elif d == 3:
move_val = s % (2 * (C - 1))
if 0 <= c - move_val < C:
c = c - move_val
elif 0 <= c - move_val + C - 1 < C:
c = move_val - c
d = 2
else:
c = 2 * (C - 1) + c - move_val
return r, c, d
catch_val = 0
for i in range(C):
catch_val += move_fisherman(i)
bowl = move_sharks(bowl)
print(catch_val)
더 생각해 볼 것?
...
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 17140번: 이차원 배열과 연산 (Python) (0) | 2022.03.12 |
---|---|
백준 17142번: 연구소3 (Python) (0) | 2022.03.12 |
백준 17144번: 미세먼지 안녕! (Python) (0) | 2022.03.09 |
백준 16236번: 아기 상어 (Python) (0) | 2022.03.06 |
백준 16235번: 나무 재테크 (Python) (0) | 2022.03.06 |
최근댓글