PS 공부
[이것이 코딩테스트다 with 파이썬] chap4 구현. 게임 개발
Min00
2024. 3. 22. 15:20
게임판이 n*m 정사각형
각 칸은 육지 혹은 바다
캐릭터는 동서남북 중 하나를 바라봄
0 1 2 3
0
1
2
3
이런 구조의 게임판 형태
캐릭터의 행동 매뉴얼은 다음과 같다
1. 현재 위치, 현재 방향을 기준으로 반시계 방향 90도 방향부터 갈 곳을 정함
2. 그 방향에 가보지 않은 칸이 존재하면 회전 후 한칸 전진
3. 없으면 회전 수행 후 1번으로 복귀
4. 네 방향 모두 이미 가봤거나 바다로 되어 있으면 방향 유지 후 한 칸 뒤로 이동 후 1번으로 복귀
5. 이 때 한 칸 뒤가 바다라 이동 불가면 멈추기
맵이 입력되고 0이면 육지 1이면 바다
둘째줄에 캐릭터의 좌표와 바라보는 방향이 공백으로 구분되서 주어짐
0123 순서대로 북동남서
# index 순으로 북동남서
dx = [0,1,0,-1]
dy = [-1,0,1,0]
# input 받기
n, m = map(int, input().split(' '))
board = []
# 캐릭터
x, y, dir = map(int, input().split(' '))
for i in range(n):
board.append(list(map(int, input().split(' '))))
# 회전
def turn(dir):
if dir == 0:
return 3
else:
return dir-1
count = 1
turntime = 0
# 캐릭터가 시작한 위치는 간걸로 취급
board[x][y]=2
# 이동 시작
while(True):
# 1. 캐릭터의 현재 좌표 기준 반시계 90도로 회전
# 북>서, 서>남 남>동 동>북
dir = turn(dir)
new_x = x+dx[dir]
new_y = y+dy[dir]
# 갈 수 있는 곳
if board[new_x][new_y] == 0:
# 이동 수행
x = new_x
y = new_y
# turntime 초기화
turntime = 0
# 갔다고 표시
board[x][y] = 2
count +=1
if turntime==4:
# 다 돌고 돌아온거
turntime = 0
new_x = x-dx[dir]
new_y = y-dy[dir]
if board[new_x][new_y] == 1:
break
else:
turntime = 0
x=new_x
y=new_y
# 갈 수 없음
turntime+=1
print(count)