💻 입력 조건

  • 첫째 줄에 보드의 크기 N이 주어진다. (2 ≤ N ≤ 100) 다음 줄에 사과의 개수 K가 주어진다. (0 ≤ K ≤ 100)
  • 다음 K개의 줄에는 사과의 위치가 주어지는데, 첫 번째 정수는 행, 두 번째 정수는 열 위치를 의미한다. 사과의 위치는 모두 다르며, 맨 위 맨 좌측 (1행 1열) 에는 사과가 없다.
  • 다음 줄에는 뱀의 방향 변환 횟수 L 이 주어진다. (1 ≤ L ≤ 100)
  • 다음 L개의 줄에는 뱀의 방향 변환 정보가 주어지는데, 정수 X와 문자 C로 이루어져 있으며. 게임 시작 시간으로부터 X초가 끝난 뒤에 왼쪽(C가 'L') 또는 오른쪽(C가 'D')로 90도 방향을 회전시킨다는 뜻이다. X는 10,000 이하의 양의 정수이며, 방향 전환 정보는 X가 증가하는 순으로 주어진다.

💻 출력 조건

  • 첫째 줄에 게임이 몇 초에 끝나는지 출력한다.

💻 입력 예시1

6
3
3 4
2 5
5 3
3
3 D
15 L
17 D

💻 출력 예시1

9

💻 입력 예시2

10
4
1 2
1 3
1 4
1 5
4
8 D
10 D
11 D
13 L

💻 출력 예시2

21

💻 입력 예시3

10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L

💻 출력 예시3

13

📖 문제 해결
문제에서 제시된 이동 규칙 대로 구현을 하면 해결할 수 있는 시뮬레이션 유형의 문제입니다. trace라는 이름의 리스트에 현재 뱀의 몸이 존재하는 좌표들을 담고, 회전을 해야 할 시에는 뱀의 머리가 현재 향하고 있는 방향을 기준으로 주어진 회전 시간에 회전할 수 있도록 코드를 작성하였습니다. 뱀이 움직이면서 자신의 몸과 닿았거나, 혹은 벽에 닿게 되면 반복문을 멈추고 이동한 시간을 출력하도록 하였습니다.

# n 입력받기
n = int(input())

# x 입력받기
x = int(input())

# 사과의 좌표 입력받기
apple_coordi = []

for i in range(x):
    row, col = list(map(int,input().split()))
    apple_coordi.append((row-1,col-1))

# l 입력받기
l = int(input())

# 회전 정보 입력받기
rotate_coordi = []

for i in range(l):
    sec, d = list(map(str,input().split()))
    rotate_coordi.append((int(sec),d))

# 초를 세는 변수 count
count = 0

trace = []
trace.append((0,0))

sec, d = rotate_coordi.pop(0)
direction = (0,1)

while True:
    
    now = trace[-1]
    move = (now[0]+direction[0],now[1]+direction[1])
    count += 1
    
    # 자신의 몸과 닿았다면 멈추기
    if move in trace:
        break
    
    # 상하좌우의 벽과 닿았다면 멈추기
    elif max(move) > n-1 or min(move) < 0:
        break
    
    # 둘 다 아니라면 move 위치로 움직이기
    else:
        trace.append(move)
    
    # 만약 사과가 있는 위치로 움직인 것이라면 사과를 먹은 후, 꼬리는 냅두기
    if move in apple_coordi:
        apple_coordi.remove(move)
        
    # 사과가 없다면 꼬리 자르기
    else:
        trace.pop(0)
    
    # 만약 회전을 할 시간이 되었다면 회전하기
    if sec == count:
        
        if direction == (0,1):
            if d == 'L':
                direction = (-1,0)
            else:
                direction = (1,0)
        
        elif direction == (0,-1):
            if d == 'L':
                direction = (1,0)
            else:
                direction = (-1,0)
        
        elif direction == (-1,0):
            if d == 'L':
                direction = (0,-1)
            else:
                direction = (0,1)
        
        elif direction == (1,0):
            if d == 'L':
                direction = (0,1)
            else:
                direction = (0,-1)
        
        # rotate_coordi 리스트 내에 좌표가 더 남아있다면 빼내기
        if len(rotate_coordi) != 0:
            sec, d = rotate_coordi.pop(0)

# 게임이 끝나는 시간을 출력
print(count) 
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글