-
[백준 문제풀이] 얼렁뚱땅 20057번 마법사 상어와 토네이도 풀이얼렁뚱땅 백준 문제풀이 2022. 5. 17. 17:14
남들 40분만에 푸는 문제
2시간만에 (어떻게 푸는지 풀이방법 보고 내가 이해해서 다시) 풀었는데 기분 좋아서 쓰는 글 >_____________<
근데 나는 문제 이해하는데에도 완전 오래걸렸다 ........................................
https://www.acmicpc.net/problem/20057 n = int(input()) array = [list(map(int,input().split())) for i in range(n)] left = [[-1, 1, 0.01], [1,1,0.01], [-2,0,0.02], [2, 0, 0.02], [0, -2, 0.05], [-1, 0, 0.07], [1, 0, 0.07], [-1, -1, 0.1], [1, -1, 0.1], [0, -1, -1]] right = [[i, -j, k] for i, j, k in left] up = [[j, i, k] for i, j, k in left] down = [[-j,i,k] for i, j, k in left] new_x, new_y = n//2, n//2 # 0 : 좌, 1 : 아래, 2 : 우, 3: 위 direction = 0 # index move = [[0, -1], [1, 0], [0, 1], [-1, 0]] root = 1 answer = 0 signal = 0 while True : if signal == 1 : break if root == n : signal = 1 root = n-1 temp_root = int(root) temp_direction = int(direction) if temp_direction == 0: what = list(left) direction += 1 elif temp_direction == 1: what = list(down) root += 1 direction += 1 elif temp_direction == 2: what = list(right) direction += 1 else: what = list(up) root += 1 direction =0 for i in range(temp_root) : new_x = new_x + move[temp_direction][0] new_y = new_y + move[temp_direction][1] sand = array[new_x][new_y] array[new_x][new_y] = 0 how_many = 0 for move_x, move_y, power in what : temp_x = new_x + move_x temp_y = new_y + move_y # 밖으로 나가 if (temp_x<0) or (temp_x>=n) or (temp_y<0) or (temp_y>=n) : if power == -1 : # 지금까지 이동했던 거 뺀 거 answer += (sand-how_many) else : # 정답에만 어느정도 넘쳤는지 더해주고 answer += int(sand * power) how_many += int(sand * power) # 밖으로 안나가 else : if power == -1: array[temp_x][temp_y] += (sand - how_many) else : wow = int(sand * power) array[temp_x][temp_y] += wow how_many += int(wow) print(answer)
'얼렁뚱땅 백준 문제풀이' 카테고리의 다른 글
[백준 문제풀이] 얼렁뚱땅 2563번 색종이 풀이 (0) 2022.05.17 [백준 문제풀이] 얼렁뚱땅 2417번 정수 제곱근 풀이 (0) 2022.05.17 [백준 문제풀이] 얼렁뚱땅 2056번 작업 풀이 (0) 2022.05.16 [백준 문제풀이] 얼렁뚱땅 2629번 양팔저울 풀이 (0) 2022.05.16 [백준 문제풀이] 얼렁뚱땅 6159번 코스튬파티 풀이 (0) 2022.05.16