난이도
골드4
유형
구현
해결
단순 구현 문제이다.
스위치가 켜질때 하나의 배열만 사용해서 문제를 해결한다면 불이 켜지면서 좀비나 아리 혹은 다른 스위치를 없에버리지는 않았나 신경을 써줘야 한다.
또한 좀비와 아리의 이동에도 신경을 많이 써줘야 한다.
코드
from sys import stdin
from collections import deque
input=stdin.readline
n=int(input())
a=input().rstrip()
zomloc=deque([])
dx=[0,-1,0,1,1,1,-1,-1,0]
dy=[-1,0,1,0,-1,1,-1,1,0]
move=2
light=[[0 for i in range(n)]for i in range(n)]
s=[list(input().rstrip()) for i in range(n)]
ahri=[0,0]
zom_meet=False
for i in range(n):
for j in range(n):
if s[i][j]=='Z':
zomloc.append([j,i,2])
if s[i][j]=='S':
s[i][j]='O'
light[i][j]=2
def switch_on(x,y):
for i in range(9):
nx=x+dx[i]
ny=y+dy[i]
if -1<nx<n and -1<ny<n:
light[ny][nx]=1 if light[ny][nx]!=2 else 3
def zom_move():
global zom_meet,zomloc,s
re=len(zomloc)
for i in range(re):
zomx,zomy,zomsee=zomloc.popleft()
nexty=zomy+dy[zomsee]
if light[zomy][zomx]%2!=1:
if ahri[0]==zomx and ahri[1]==zomy:
zom_meet=True
return
if -1<nexty<n:
zomloc.append([zomx,nexty,zomsee])
if light[nexty][zomx]%2==1:
continue
if ahri[0]==zomx and ahri[1]==nexty:
zom_meet=True
return
else:
zomsee=(zomsee+2)%4
zomloc.append([zomx,zomy,zomsee])
for i in range(len(a)):
if a[i]=='R':
move=(move-1 if move>0 else 3)%4
elif a[i]=='L':
move=(move+1)%4
else:
nx=ahri[0]+dx[move]
ny=ahri[1]+dy[move]
if -1<nx<n and -1<ny<n:
ahri[0]=nx
ahri[1]=ny
if light[ny][nx]>1:
switch_on(nx,ny)
s[ahri[1]][ahri[0]]='A'
zom_move()
if zom_meet:
break
if zom_meet:
print("Aaaaaah!")
else:
print("Phew...")
좋은 / 비슷한 문제
삼성 기출문제집
'프로그래밍 > 백준' 카테고리의 다른 글
백준 9934 - 완전이진트리 (파이썬) (0) | 2022.03.29 |
---|---|
백준 20950 - 미술가 미미 (파이썬) (0) | 2022.03.29 |
백준 7453 - 합이 0인 네 정수 (파이썬) (0) | 2022.03.22 |
백준 23353 - 승부 조작 (파이썬) (0) | 2022.03.21 |
백준 23350 - K 물류창고 (파이썬) (0) | 2022.03.21 |