자동차
시간 제한1초메모리 제한32 MB
6x6 격자에 놓인 가로·세로 차량들을 밀어 첫 번째 차를 동쪽 끝으로 빼내는 최소 이동 횟수를 구한다.
- 난이도
보통10점 중 6점
- 유형
- BFS
- 정답자
- 아직 제출이 없습니다
문제
교통 체증은 모든 운전자의 악몽입니다. 차들이 거의, 혹은 전혀 움직이지 못하는 꽉 막힌 도로에 갇히는 것을 좋아하는 사람은 없습니다. 이 체증에서 빠져나갈 길을 찾아 봅시다.
작지만 까다로운 교통 체증을 격자 위에서 모형화합니다. 자동차와 트럭이 아래 그림처럼 격자의 정수 위치에 놓여 있습니다. 모든 차량의 폭은 칸입니다. 자동차(car)는 길이가 칸이고, 트럭(truck)은 길이가 칸입니다. 각 차량은 가로 방향(동–서) 또는 세로 방향(남–북) 중 하나로 놓여 있습니다.

차량끼리는 서로를 통과할 수 없고, 방향을 바꿀 수 없으며, 격자 밖으로 옆으로 벗어날 수도 없습니다. 차량은 자신의 방향을 따라서만 미끄러질 수 있으며(가로 차량은 동쪽 또는 서쪽으로, 세로 차량은 북쪽 또는 남쪽으로), 빈 공간과 격자 경계가 허락하는 만큼만 움직일 수 있습니다. 한 번의 이동(move)에서는 정확히 한 대의 차량만 미끄러지며, 지나가는 칸이 모두 비어 있다면 한 방향으로 원하는 만큼 여러 칸을 한꺼번에 미끄러질 수 있습니다.
당신의 차는 입력에서 가장 먼저 주어지는 가로 방향 자동차입니다. 목표는 차량들을 이리저리 움직여 당신의 차가 격자의 가장 오른쪽(동쪽) 경계 밖으로 빠져나가게 하는 것입니다. 당신의 차를 동쪽 경계 밖으로 몰아내는 것 자체도 한 번의 이동으로 셉니다. 필요한 이동 횟수의 최솟값을 구하세요.
입력
첫째 줄에 차량의 수를 나타내는 정수 ()이 주어집니다.
이어지는 개의 줄에는 각각 한 대의 차량이 다음 형식으로 주어집니다.
o r c k
- 는 차량이 가로 방향이면
h, 세로 방향이면v입니다. - 과 ()는 차량이 차지하는 칸 중 가장 왼쪽 위(북서쪽) 칸의 행과 열입니다. 행은 위에서 아래로 부터 까지, 열은 왼쪽(서쪽)에서 오른쪽(동쪽)으로 부터 까지 번호가 매겨집니다. 가로 차량은 에서 동쪽으로, 세로 차량은 남쪽으로 뻗어 나갑니다.
- 는 자동차이면
c(길이 ), 트럭이면t(길이 )입니다.
가장 먼저 주어지는 차량이 당신의 차이며, 가로 방향 자동차라고 가정해도 됩니다.
출력
당신의 차를 격자의 오른쪽 경계 밖으로 몰아내는 데 필요한 최소 이동 횟수를 출력합니다. 그것이 불가능하다면 대신 The car is trapped.를 출력합니다.