CoTe/구현
[이코테] 게임 개발
TheSole
2023. 4. 18. 18:35
# 4x4 맵 생성
N, M = map(int, input().split())
# 현재 방향
x, y, direction = map(int, input().split())
# 4x4 맵 초기화
d = [[0] * N for _ in range(M)]
# 현재 입력 위치 방문처리
d[x][y] = 1
# 북 동 남 서 방향정의
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 전체 맵 정보 입력
array = []
for _ in range(N):
temp = list(map(int, input().split()))
array.append(temp)
# 왼쪽으로 회전
def turn_left():
global direction
direction -= 1
if direction == -1:
direction = 3
# 시뮬레이션 시작
count = 1
turn_time = 0
while 1:
# 왼쪽으로 회전
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
# 회전한 이후 정면에 가보지 않은 칸이 존재하는 경우 이동
if d[nx][ny] == 0 and array[nx][ny] == 0:
d[nx][ny] = 1
x = nx
y = ny
count += 1
turn_time = 0
continue
# 회전한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우
else:
turn_time += 1
# 네 방향 모두 갈 수 없는 경우
if turn_time == 4:
nx = x - dx[direction]
ny = y - dy[direction]
# 뒤로 갈 수 있다면 이동
if array[nx][ny] == 0:
x = nx
y = ny
# 뒤가 바다로 막혀있는 경우
else:
break
turn_time = 0
print(count)
핵심은 일반적으로 방향을 설정해서 이동하는 문제 유형에서는 dx, dy라는 별도의 리스트를 만들어 방향을 정하는 것이 효과적
- 예를 들어 다음의 답안 예시 코드에서는 현재 캐릭터가 북쪽을 바라보고 있을 때는 북쪽으로 이동하기 위해 x와 y좌표를 각각 dx[0], dy[0]만큼 더한다.
- 즉 현재 위치에서 (-1, 0)만큼 이동 시키는 것이다.