시간 줄이려고 global안쓰고 딕셔너리 써봤는데 메모리가 줄어들고 시간은 늘어났다
✨ 접근
위와 같은 그림을 그리며 패턴을 파악했다
✨ 코드
딕셔너리 쓰기
def move(cnt, dx, dy, direction):
for _ in range(cnt + 1):
sx, sy = init['sx'] + dx, init['sy'] + dy
init['sx'], init['sy'] = sx, sy
if sx < 0 or sy < 0:
break
spreads = 0
for dx, dy, r in rate[direction]:
nx = sx + dx
ny = sy + dy
if r == 0:
sand = desert[sx][sy] - spreads
else:
sand = int(desert[sx][sy] * r)
if 0 <= nx < N and 0 <= ny < N:
desert[nx][ny] += sand
else:
init['res'] += sand
spreads += sand
N = int(input())
desert = [list(map(int, input().split())) for _ in range(N)]
init = {'sx': N//2, 'sy': N//2, 'res': 0}
left = [(-2, 0, 0.02), (2, 0, 0.02), (-1, -1, 0.1), (-1, 0, 0.07), (-1, 1, 0.01), (1, -1, 0.1), (1, 0, 0.07), (1, 1, 0.01), (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(init['res'])
'Algorithm > Python' 카테고리의 다른 글
[파이썬/프로그래머스]괄호 변환 (0) | 2021.03.28 |
---|---|
[파이썬/백준 20058] 마법사 상어와 파이어스톰/런타임에러(RecursionError) 원인과 해결방법 (0) | 2021.03.25 |
[파이썬/백준 20056] 마법사 상어와 파이어볼 시뮬레이션 (0) | 2021.03.23 |
[파이썬/백준 1697] 숨박꼭질 BFS (0) | 2021.03.21 |
[파이썬/백준 2178] 미로 탐색 BFS (0) | 2021.03.21 |