백준 17780번 새로운 게임 (Python 3)
2022. 9. 1. 18:23ㆍProblem solving
Baekjoon online judge 17780번 파이썬
링크
https://www.acmicpc.net/problem/17780
17780번: 새로운 게임
재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하
www.acmicpc.net
구현문제
소스코드
import sys
from collections import deque
input = sys.stdin.readline
n,k=map(int,input().split())
map_data=[list(map(int,input().split())) for _ in range(n)]
piece_map=[[deque() for _ in range(n)] for _ in range(n)]
piece=list()
for i in range(k):
y,x,d=map(int,input().split())
piece.append([y-1,x-1,d])
piece_map[y-1][x-1].append(i)
index=[[],[1,0],[-1,0],[0,-1],[0,1]]
max_height=0 #병합이 일어날때 갱신
turn=0
def update(before,after):
global piece_map
global piece
y,x=before
ny,nx=after
for p in piece_map[y][x]:
oy,ox,od=piece[p]
piece[p]=[ny,nx,od]
#piece_map[y][x]=deque()
def move(num):
global piece
global piece_map
global max_height
y,x,d=piece[num]
if len(piece_map[y][x])>=2 and piece_map[y][x][0]!=num:
return False
else:
nx=x+index[d][0]
ny=y+index[d][1]
if not (0<=nx<n and 0<=ny<n) or map_data[ny][nx]==2:
if d==1:
d=2
elif d==2:
d=1
elif d==3:
d=4
elif d==4:
d=3
nx=x+index[d][0]
ny=y+index[d][1]
piece[num] = [y, x, d]
if not (0<=nx<n and 0<=ny<n) or map_data[ny][nx]==2:
#update([y,x],[y,x,d]) # piece_map에서 각 piece에 접근해서 데이터수정
return True
if map_data[ny][nx]==1:
piece_map[y][x].reverse()
piece_map[ny][nx].extend(piece_map[y][x])
max_height=max(max_height,len(piece_map[ny][nx]))
update([y,x],[ny,nx])
piece_map[y][x] = deque()
return True
elif map_data[ny][nx]==0:
piece_map[ny][nx].extend(piece_map[y][x])
max_height = max(max_height, len(piece_map[ny][nx]))
update([y,x],[ny,nx])
piece_map[y][x] = deque()
return True
while max_height<4 and turn<=1000:
turn+=1
for i in range(k):
move(i)
#print(piece_map)
#print(piece)
if turn>1000:
print(-1)
else:
print(turn)
'Problem solving' 카테고리의 다른 글
백준 16234번 인구 이동 (Python 3) (0) | 2022.09.02 |
---|---|
백준 17837번 새로운 게임 2 (Python 3) (0) | 2022.09.01 |
백준 2529번 부등호 (Python 3) (0) | 2022.09.01 |
백준 2003번 수들의 합 2 (Python 3) (0) | 2022.09.01 |
백준 16198번 에너지 모으기 (Python 3) (0) | 2022.09.01 |