💻 입력 조건

  • 첫째 줄에 맵의 세로 크기 N과 가로 크기 M을 공백으로 구분하여 입력한다. (3 <= N, M <= 50)
  • 둘째 줄에 게임 캐릭터가 있는 칸의 좌표 (A, B)와 바라보는 방향 d가 각각 서로 공백으로 구분하여 주어진다. 방향 d의 값으로는 다음과 같이 4가지가 존재한다.
    • 0: 북쪽
    • 1: 동쪽
    • 2: 남쪽
    • 3: 서쪽
  • 셋째 줄부터 맵이 육지인지 바다인지에 대한 정보가 주어진다. N개의 줄에 맵의 상태가 북쪽부터 남쪽 순서대로, 각 줄의 데이터는 서쪽부터 동쪽 순서대로 주어진다. 맵의 외곽은 항상 바다로 되어 있다.
    • 0: 육지
    • 1: 바다
  • 처음에 게임 캐릭터가 방문한 칸의 수를 출력한다.

💻 출력 조건

  • 첫째 줄에 이동을 마친 후 캐릭터가 방문한 칸의 수를 출력한다.

💻 입력 예시

4 4        # 4 x 4 맵 생성
1 1 0      # (1, 1)에 북쪽(0)을 바라보고 서 있는 캐릭터
1 1 1 1    # 첫 줄은 모두 바다
1 0 0 1    # 둘째 줄은 바다/육지/육지/바다
1 1 0 1    # 셋째 줄은 바다/바다/육지/바다
1 1 1 1    # 넷째 줄은 모두 바다

💻 출력 예시

3

📖 문제 해결
문제에서 제시한 이동 방법을 차근차근 구현함으로써 문제를 해결할 수 있었습니다. 특히 방향을 저장해 놓은 변수 d를 리스트 dxdy의 인덱스로 사용함으로써 코드를 보다 간결하게 작성할 수 있었습니다. (답안 코드는 책의 코드를 참고 및 이해 후 작성한 코드입니다.)

# n, m 입력받기
n, m = list(map(int,input().split()))

# a, b, d 입력받기
a, b, d = list(map(int,input().split()))

# map_의 정보 입력받기
map_ = []

for i in range(n):
    map_.append(list(map(int,input().split())))

# direction 및 dx, dy 설정
direction = [0,1,2,3]
dx = [-1, 0, +1, 0]
dy = [0, +1, 0, -1]

# 왼쪽으로 회전하는 함수인 turn_left
def turn_left():
    global d
    d -= 1
    if d == -1:
        d = 3
        
# 방문을 한 곳인지 아닌 지를 확인하기 위한 2차원 리스트 reference
reference = [[0]*n for _ in range(n)]

result = 0
turn_count = 0

while True :

    # 왼쪽으로 회전
    turn_left()
    
    # 회전 후 전진했을 때 육지이고, 방문한 적이 없는 곳이라면 방문
    if map_[a + dx[d]][b + dy[d]] == 0 and reference[a + dx[d]][b + dy[d]] == 0:
        a = a + dx[d]
        b = b + dy[d]
        reference[a][b] = 1
        result += 1
        turn_count = 0
        continue 
    
    # 그렇지 않다면 turn_count += 1
    else : 
        turn_count += 1
    
    # 만약 네 방향 모두 이미 가본 칸이거나 바다로 되어 있는 칸인 경우
    # 바라보는 방향을 유지한 채로 한 칸 뒤로 가고 1단계로 돌아감
    if turn_count == 4:
        
        # 단, 이때 뒤쪽 방향이 육지가 아닌 바다인 칸이면 움직임을 멈춤
        if map_[a - dx[d]][b - dy[d]] != 0:
            break
            
        else :
            a = a - dx[d]
            b = b - dy[d]

        turn_count = 0

# 캐릭터가 방문한 칸의 수를 출력
print(result)
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글