소요 시간: 1시간 3분
단순 구현 문제
dictionary를 이용해서 푸는게 좋을 것 같다고 생각
알고리즘 문제 풀이에서 딕셔너리 사용은 처음이라서 dictionary 개념을 복습하면서 풀었다.
딕셔너리를 for문 돌리면 key가 반환되어서 나온다.
그리고 append로 딕셔너리에 추가하는 것이 아닌 my_dict[(r, c)] = [a, b, c] 이런식으로 추가 가능하다.
해당 key를 가진 값이 딕셔너리에 있는지 검색해보려면 in 연산을 사용하는게 좋다.
나는 딕셔너리의 key로 (r, c)를 사용했다. 즉, 상어의 위치가 키라는 것이다. 상어는 위치가 같을 때 잡아먹기때문에 이렇게 키값으로 쓸 수 있었다.
value의 경우는 속력, 방향, 크기이다.
문제에선 방향을 1, 2, 3, 4로 줬는데 간단히 함수를 구현해서 tuple값으로 나타내주었다.
"""
4 6 8
4 1 3 3 8
1 3 5 2 9
2 4 8 4 1
4 5 0 1 4
3 3 1 2 7
1 5 8 4 3
3 6 2 1 2
2 2 2 3 5
첫째 줄에 격자판의 크기 R, C와 상어의 수 M이 주어진다. (2 ≤ R, C ≤ 100, 0 ≤ M ≤ R×C)
둘째 줄부터 M개의 줄에 상어의 정보가 주어진다. 상어의 정보는 다섯 정수 r, c, s, d, z (1 ≤ r ≤ R, 1 ≤ c ≤ C, 0 ≤ s ≤ 1000, 1 ≤ d ≤ 4, 1 ≤ z ≤ 10000) 로 이루어져 있다. (r, c)는 상어의 위치, s는 속력, d는 이동 방향, z는 크기이다. d가 1인 경우는 위, 2인 경우는 아래, 3인 경우는 오른쪽, 4인 경우는 왼쪽을 의미한다.
두 상어가 같은 크기를 갖는 경우는 없고, 하나의 칸에 둘 이상의 상어가 있는 경우는 없다.
"""
R, C, m = map(int, input().split())
sharks = {}
tmp_sharks = {}
get_shark_size = 0
def direct(d) :
if d == 1 :
return (-1, 0)
elif d == 2:
return (1, 0)
elif d == 3:
return (0, 1)
elif d == 4:
return (0, -1)
for _ in range(m) :
r, c, s, d, z = map(int, input().split())
sharks[(r - 1, c - 1)] = [s, direct(d), z]
for man in range(C) :
# 현재 낚시꾼이 있는 열에 상어가 있는지 확인
for y in range(R) :
if ((y, man) in sharks) :
# 상어가 있음.
_, _, size = sharks[(y, man)]
del sharks[(y, man)]
get_shark_size += size
break
# 상어들의 이동
for shark in sharks :
r, c = shark
s, d, z = sharks[shark]
rr, cc = d
currentR = r + (rr * s)
currentC = c + (cc * s)
while not (0 <= currentC < C and 0 <= currentR < R ) :
if (currentR >= R) :
tmp = currentR - (R - 1)
currentR = (R - 1) - tmp
rr *= -1
elif (currentR < 0) :
currentR *= -1
rr *= -1
elif (currentC >= C) :
tmp = currentC - (C - 1)
currentC = (C - 1) - tmp
cc *= -1
elif (currentC < 0) :
currentC *= -1
cc *= -1
d = (rr, cc)
# 같은 공간에 가게 되면?
if ((currentR, currentC) in tmp_sharks) :
_, _, tmp_size = tmp_sharks[(currentR, currentC)]
if (z > tmp_size) :
tmp_sharks[(currentR, currentC)] = s, d, z
else :
tmp_sharks[(currentR, currentC)] = s, d, z
# 이동 후 sharks 리셋..
sharks = tmp_sharks
tmp_sharks = {}
print(get_shark_size)
implementation 문제보다 DP가 더 어렵다..