-
[백준] 20056 - 마법사 상어와 파이어볼 (파이썬)알고리즘/백준 2021. 10. 4. 13:51
n, m, k = map(int,input().split()) fireball = [] for _ in range(m): fireball.append(list(map(int,input().split()))) fireball[-1][0] -= 1 fireball[-1][1] -= 1 dx = [-1,-1,0,1,1,1,0,-1] dy = [0,1,1,1,0,-1,-1,-1] for _ in range(k): array = [[[] for _ in range(n)] for _ in range(n)] for i in fireball: nx = i[0] + dx[i[4]] * i[3] ny = i[1] + dy[i[4]] * i[3] while nx<0: nx += n while nx>=n: nx -= n while ny<0: ny += n while ny>=n: ny -= n array[nx][ny].append([nx,ny,i[2],i[3],i[4]]) fireball = [] for i in range(n): for j in range(n): if len(array[i][j]) == 1: fireball.append(array[i][j][0]) elif len(array[i][j]) > 1: t = array[i][j][0][4] % 2 sm = 0 check = 0 v = 0 for k in array[i][j]: if k[4] % 2 != t: check = 1 sm += k[2] v += k[3] sm = sm//5 v = v//len(array[i][j]) if sm == 0: continue else: if check == 1: for ii in range(4): fireball.append([i,j,sm,v,ii*2+1]) else: for ii in range(4): fireball.append([i,j,sm,v,ii*2]) cnt = 0 for i in fireball: cnt += i[2] print(cnt)
문제 이해가 안가서 시간이 좀 걸렸다..
계속, 아니! 그래서.. 격자 밖으로 넘어가면 어떻게 되는데?? 라면서 혼자 불만을 토하다가
결국 순환된다는 것을 깨닫고 while로 x,y 범위를 0<= x,y < n으로 맞춰주어서 풀 수 있었다.
t는 모든게 홀수or 짝수인지 판별해주도록 도와준다. 처음 값이 짝수인지 홀수인지 찾아준다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1759 - 암호 만들기 (파이썬) (0) 2021.10.20 [백준] 20057 - 마법사 상어와 토네이도 (파이썬) (0) 2021.10.08 [백준] 20055 - 컨베이어 벨트 위의 로봇 (파이썬) (0) 2021.09.30 [백준] 1915 - 가장 큰 정사각형 (파이썬) (0) 2021.09.29 [백준] 17822 - 원판 돌리기 (파이썬) (0) 2021.09.28