티스토리 뷰
문제
https://www.acmicpc.net/problem/20056
풀이
오래걸렸음. 일단 문제를 제대로 안읽음.
윗줄만 읽고 r, c, m, d, s로 값이 주어지는 줄 알았는데 입력 부분을 보니까 s랑 d랑 바뀌여있었음. 내탓임.
아무튼,
명령이 실행될때마다 가장 먼저 파이어볼들의 위치를 이동시켜주었음.
(x,y,m,s,d)로 주어지므로, 새로운 x는 ball[0]에 d와 s를 곱한 값을 더해주었음. y도 마찬가지로 진행한 후에 n으로 나눈 나머지를 x, y값으로 정해주었음.(보드가 이어져있기때문)
이때, 파이어볼들의 위치가 정해진 후에 board[newX][newY]에 파이어볼들을 추가해주었음.
다음으로 board의 칸을 확인하면서 파이어볼이 한 개인 경우엔 다시 fireballs에 append해줬음. popleft()를 이용했기때문에 매번 board를 초기화해주지 않아도됨.
만약 파이어볼이 두 개 이상인 경우엔 board[i][j]가 빌때까지 조건을 확인해주면서 fireballs에 넣어주었음.
어차피 위치는 그대로이므로 질량 합, 속도 합, 방향 상태만 확인하면됨.
만약 질량 합을 count로 나눈 몫이 0이라면 continue를 이용해 fireballs에 추가하지않았음.
import sys
from collections import deque
input = sys.stdin.readline
n,m,k = map(int,input().split())
board = [[deque() for _ in range(n)] for _ in range(n)]
moveDir = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]
fireballs = deque()
for _ in range(m):
x,y,m,s,d = map(int,input().split())
fireballs.append((x - 1,y - 1,m,s,d))
for _ in range(k):
while fireballs:
ball = fireballs.popleft()
newX = ball[0] + moveDir[ball[4]][0] * ball[3]
newY = ball[1] + moveDir[ball[4]][1] * ball[3]
newX %= n
newY %= n
board[newX][newY].append((newX,newY,ball[2],ball[3],ball[4]))
for i in range(n):
for j in range(n):
if len(board[i][j]) == 1:
fireballs.append(board[i][j].popleft())
elif len(board[i][j]) > 1:
count = len(board[i][j])
sumM, sumS, odd, even = 0,0,0,0
while board[i][j]:
temp = board[i][j].popleft()
sumM += temp[2]
sumS += temp[3]
if temp[4] % 2 == 0:
even += 1
else:
odd += 1
newM = sumM // 5
if newM == 0:
continue
newS = sumS // count
if odd == 0 or even == 0:
newDir = [0,2,4,6]
else:
newDir = [1,3,5,7]
for dir in newDir:
fireballs.append((i,j,newM,newS,dir))
result = 0
for i in range(len(fireballs)):
result += fireballs[i][2]
print(result)
_____________________________________________________________________________________________________
문제 잘읽어야함
'PS' 카테고리의 다른 글
[Python] 백준_드래곤커브(15685) (0) | 2023.03.22 |
---|---|
[Python] 백준_사다리조작(15684) (0) | 2023.03.18 |
[Python] 백준_주사위 굴리기(14499) (0) | 2023.03.17 |
[Python] 백준_테트로미노(14500) (0) | 2023.03.16 |
[Python] 백준_상어 초등학교(21608) (0) | 2023.03.16 |
댓글
최근에 올라온 글
- Total
- Today
- Yesterday