728x90
어떻게 구현 문제는 풀어도 풀어도 모르겠지
으아
코드 :
def move(cnt, dx,dy,dir) :
global ans
for _ in range(cnt+1) :
# 다음 좌표
now[0],now[1] = now[0] + dx, now[1] + dy
# (0,0) 까지 이동한 뒤 소멸
if now[0] < 0 or now[1] < 0 : break
spreads = 0
for dx,dy, r in rate[dir] :
nx,ny = now[0] + dx , now[1] + dy
# 알파 ( 남은 모래의 양 )
if r == 0 : sand =mp[now[0]][now[1]] - spreads
# % 가 있을 때
else : sand= int(mp[now[0]][now[1]] * r)
# 내부라면 축적
if 0<=nx<n and 0<=ny<n :
mp[nx][ny] += sand
# 외부라면 ans에 축적
else :
ans += sand
# 축적된 양를 저장
spreads += sand
if __name__=="__main__" :
n = int(input())
mp = [list(map(int,input().split())) for _ in range(n)]
ans = 0
now = [n//2,n//2]
left = [[-2,0,0.02], [2,0,0.02] ,[-1,0,0.07], [1,0,0.07] ,[-1,1,0.01],[1,1,0.01],[-1,-1,0.1],[1,-1,0.1],[0,-2,0.05],[0,-1,0]]
right = [[x,-y,z] for x,y,z in left]
down = [[-y,x,z] for x,y,z in left]
up = [[-x,y,z] for x,y,z in down]
rate = {'left' : left, 'right' : right, 'down' : down, 'up' : up}
for i in range(n) :
if i%2 == 0 :
move(i,0,-1,'left') # 왼쪽
move(i,1,0,'down') # 아래쪽
else :
move(i,0,1,'right') # 오른쪽
move(i,-1,0,'up') # 위쪽
print(ans)
참고 블로그 :
https://yeon-code.tistory.com/94
[python] BOJ 백준 20057: 마법사상어와 토네이도
1. 문제 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래
yeon-code.tistory.com
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[Python/BOJ] 백준 1713 후보 추천하기_구현 (0) | 2022.09.02 |
---|---|
[Python/BOJ] 백준 23325 마법천자문_DP (0) | 2022.09.02 |
[Python/백준]ABCDE(DFS) (0) | 2022.08.31 |
[Python/백준]전깃줄(DP) (0) | 2022.08.29 |
[Python/BOJ] 백준 2579 계단오르기_DP (0) | 2022.08.29 |