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)만큼 이동 시키는 것이다.