728x90
딱히 어렵다고 생각되지는 않았다.
상어가 벽에 충돌할 때 구현하는 법만 안다면 쉬운 문제였으나 그 방법을 생각 못했다.
따로 수학공식이 있을 것이라 생각하고 계속 생각해보려고 했는데 못찾았다.
답을 찾아보니 간단하게 방향만 바꿔주고 가야할 길이를 줄이지 않으면 해결되는 것이었다.
이 문제를 통해 배웠으니 다른 문제에서 만나면 사용하자.
추가로 문제가 분명히 맞는데 자꾸 틀리다라고 떠서 한참을 봤다.
그 이유는 처음 입력받은 r,c를 상어 위치하면서 똑같은 변수에 r,c를 받아서 다른 값으로 변경되었었기 때문이다.
입력받는 변수이름을 주의하자.
1,2,3,4가 상 하 우 좌이다.
이를 0부터 시작하도록 변경하여 그리면
이렇다.
0과 2의 경우 반대 방향으로 가려면 1을 더하면 되고
1과 3의 경우 반대 방향으로 가려면 1을 빼면 된다.
원래 이차원 배열1= 이차원배열2 이렇게 하면 이차원 배열 2의 값들이 이차원 배열1의 값으로 잘 복사되었는데 이 문제에서는 에러가 발생한다. 각각의 요소가 리스트로 된 이차원 배열을 이렇게 copy가 안되나보다.
1~4를 열의 길이만큼 반복한다.
1. 오른쪽으로 한칸 움직이기
2. 낚시왕 열에서 땅과 가까운 상어를 잡는다.
3. 각각의 상어가 이동한다.
4. 한 칸에 여러마리가 있다면 가장 큰 상어를 제외하고는 없앤다.
코드 :
# 상 하 우 좌
dx = [-1,1,0,0]
dy = [0,0,1,-1]
# 상어 이동
def move_shark() :
new = [[[] for i in range(c)] for j in range(r)]
for i in range(r) :
for j in range(c) :
if shark[i][j] :
x,y = i,j
s,d,z = shark[x][y][0]
dist = s
while dist > 0 :
nx,ny = x + dx[d],y + dy[d]
# 벽과 충돌하지 않은 경우
if 0<=nx<r and 0<=ny<c :
x,y = nx,ny
dist -=1
# 벽과 충돌한 경우
else :
# 상 or 우
if d == 0 or d == 2 :
d +=1
elif d==1 or d == 3 :
d-=1
new[x][y].append([s,d,z])
for i in range(r) :
for j in range(c) :
shark[i][j] = new[i][j]
# 상어 잡기
def catch_shark() :
global answer
# 낚시왕이 열을 돌아다니면서
for king in range(c) :
# 땅과 가까운 곳을 확인
for x in range(r) :
# 상어가 있다면
if shark[x][king] :
s,d,z = shark[x][king].pop(0)
answer+=z
break
# 상어 움직이기
move_shark()
# 한 곳에 상어가 여러마리 있는 경우 처리
for i in range(r) :
for j in range(c) :
# 상어가 2마리 이상 있는 경우
if len(shark[i][j])>1 :
shark[i][j].sort(key = lambda x : x[2], reverse = True)
while len(shark[i][j])>1 :
shark[i][j].pop()
if __name__=="__main__" :
r,c,m = map(int,input().split())
shark = [[[] for i in range(c)] for j in range(r)]
for _ in range(m) :
R,C,s,d,z = map(int,input().split())
shark[R-1][C-1].append([s,d-1,z])
answer = 0
catch_shark()
print(answer)
참고 블로그 :
https://heytech.tistory.com/378
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[Python/BOJ] 백준 17398 통신망 분할_유니온파인드 (0) | 2022.08.11 |
---|---|
[Python/BOJ] 백준 15927 회문은 회문이 아니야!!_문자열 (0) | 2022.08.10 |
[Python/백준]12865번_평범한 배낭(DP, 냅색) (0) | 2022.08.06 |
[Python/백준]2136 개미 (0) | 2022.08.05 |
[Python/BOJ] 백준 1027 고층 건물(구현) (0) | 2022.08.05 |