[이코테] 구현_게임 개발 (python)

juyeon·2022년 6월 29일
0

나의 풀이

1. 성공

n, m = map(int, input().split()) #n: 세로(행), m: 가로(열)
x, y, d = map(int, input().split()) #첫 시작 x, y, 방향
space = [list(map(int, input().split())) for _ in range(n)] #지도

dir = [0, 1, 2, 3] #북 동 남 서(시계 방향)
go = [(-1, 0), (0, 1), (1, 0), (0, -1)] #북 동 남 서 1칸씩 이동
rotation = 0 #네 방향을 한번씩 회전하는 수 카운트
count = 0 #방문 수 카운트

while True:
	back_d = dir[d - 2] #뒤쪽으로 이동하기 위해서 방향 설정
	new_x = x + go[back_d][0]
	new_y = y + go[back_d][1]
    
    #네 방향 모두 가본 칸이거나 바다인 경우
	if rotation == 4:
		if space[new_x][new_y] == 1
        or new_x < 0 or new_x > n
        or new_y < 0 or new_y > m:
         	#뒤쪽 방향이 바다일 경우(& 맵의 외곽일 경우), 멈춤
			break
            
		else: #뒤로 한칸 이동
			x = new_x #x 재설정
			y = new_y #y 재설정
			count += 1
	else: 
		next_d = dir[d - 1] #왼쪽 방향으로 회전
		new_x = x + go[next_d][0] #새로운 x
		new_y = y + go[next_d][1] #새로운 y
		d = next_d #현재 방향 재설정
        
		#왼쪽 방향이 바다이거나(& 맵 외곽), 방문한 칸이라면 넘어감
		if space[new_x][new_y] == 1
        or space[new_x][new_y] == 2
        or new_x < 0 or new_x > n
        or new_y < 0 or new_y > m:
			rotation += 1
			continue
            
		#왼쪽 방향에 가보지 않은 칸이 있을 경우, 이동
		space[x][y] = 2 #가본 칸은 2로 표시
		x = new_x #x 재설정
		y = new_y #y 재설정
		rotation = 0 #초기화
		count += 1 #방문한 칸 카운트
        
print(count)
profile
내 인생의 주연

0개의 댓글