[BaekJoon] 백준 20056번 마법사 상어와 파이어볼
🎈문제
https://www.acmicpc.net/problem/20056
💬설명
- 처음에 fireball을 어떤 방식으로 저장할지 고민하다가 헤매서 다시 풀었다. 풀고 나니 쉬운 문제였는데 2시간 30분이나 걸렸다..
- 포인트는 이동시킬때 앞뒤가 이어져 있다는 점이랑 파이어볼을 지우거나 추가할 때 어떤 방식으로 처리할지 이렇게 2가지 인것 같다. 잘못하면 디버깅 하는데만 오래 걸릴수 있는 문제
👩💻코드
# BaekJoon20056.py
import copy
N, M, K = map(int, input().split())
fireball = {}
fireball_n = 0
for i in range(M):
fireball[i] = list(map(int, input().split()))
fireball[i][0] -= 1
fireball[i][1] -= 1
fireball_n += 1
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, 1, 1, 1, 0, -1, -1, -1]
# 파이어볼 방향 d로 속력 s칸 만큼 이동
def move():
global fireball, dx, dy, N
for f in fireball.values():
f[0] = (f[0] + dx[f[4]] * f[3] - N) % N
f[1] = (f[1] + dy[f[4]] * f[3] - N) % N
def is_all_same(arr):
is_odd = 0
is_same = True
for i in range(len(arr)):
if i == 0:
is_odd = arr[i] % 2
continue
if arr[i] % 2 != is_odd:
is_same = False
return is_same
# 2개 이상의 파이어볼이 있는 칸의 파이어볼 합체
def union():
global fireball, N, fireball_n
arr = [[[] for _ in range(N)] for _ in range(N)]
for key in fireball.keys():
arr[fireball[key][0]][fireball[key][1]].append(key)
for i in range(N):
for j in range(N):
if len(arr[i][j]) < 2:
continue
fs = arr[i][j]
same = is_all_same([fireball[f][4] for f in fs])
m, s = 0, 0
for f in fs:
m += fireball[f][2]
s += fireball[f][3]
del fireball[f]
if m // 5 == 0:
continue
if same:
di = [0, 2, 4, 6]
for k in range(4):
fireball[fireball_n] = [i, j, m // 5, s // len(fs), di[k]]
fireball_n += 1
else:
di = [1, 3, 5, 7]
for k in range(4):
fireball[fireball_n] = [i, j, m // 5, s // len(fs), di[k]]
fireball_n += 1
def print_result():
global fireball
result = 0
for f in fireball.values():
result += f[2]
print(result)
def solution():
global K, fireball
for _ in range(K):
move()
union()
print_result()
solution()
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 19238번 스타트 택시 (0) | 2021.10.23 |
---|---|
[BaekJoon] 백준 20055번 컨베이어 벨트 위의 로봇 (0) | 2021.10.22 |
[BaekJoon] 백준 16235번 나무 재테크 (0) | 2021.10.21 |
[BaekJoon] 백준 20058번 마법사 상어와 파이어스톰 (0) | 2021.10.21 |
[BaekJoon] 백준 20057번 마법사 상어와 토네이도 (0) | 2021.10.20 |