KTX

한국철도공사는 시범적으로 서울~부산 구간에서 KTX 열차에 등급을 두어 고객에게 차별화된 서비스를 제공하려고 한다. 이를 위해 한국철도공사는 각 KTX 열차에 등급을 매기고(1, 2, ..., n) 1등급일수록 도착지에 빨리 도착하는 것을 보장하려고 한다. 현재 서울~부산간 연결되어 있는 선로의 모양이 아래와 같이 도중에 우회할 수 있는 공간이 두 군데 있다.

현재 열차가 출발하여 기차역까지 등급별로 도착하기 위해서 위 그림에서 보이는 두 우회로를 선택할 수 있다. 예를 들어 출발지에서 순서대로 출발하는 열차의 등급이 1, 3, 2, 4 일 경우, 1 등급은 그대로 기차역으로 통과하고 3 등급은 우회로를 선택하여 저속으로 운행한 후 2 등급 열차를 먼저 보내고 3 등급 열차 뒤에 4 등급 열차가 도착하도록 속도를 조정하면 등급에 따라 서울역에 도착하게 할 수 있다. (우회로에서는 속도를 마음대로 조정할 수 있다고 가정한다.)

서울~부산간 열차 등급이 순서대로 주어질 때 열차가 등급 순서대로 목적지에 도착할 수 있는 지를 검사하는 프로그램을 작성하시오.

Input
입력은 표준입력(Standard Input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T (1 <= T <= 20) 가 주어진다. 각 테스트 케이스는 첫 번째 줄에 열차의 개수(M), 두 번째 줄어에는 열차의 등급 Ni(1 <= Ni < M, i = 1, 2, ..., M, 1 <= M <= 1000) 이 하나의 공백을 사이에 두고 주어진다.(Ni는 서로 다르다.)

Output
출력은 표준출력(Standard Output)을 통하여 출력한다. 각 테스트 케이스에 대해서 검사 결과를 한 줄씩 출력한다. 만일 등급에 맞게 배열할 수 있으면 YES, 없으면 NO를 출력하시오.

Sample Input
2 3 3 2 1 5 2 4 5 3 1

Sample Output
YES NO

Java
code format="java5" public class KTX { public static void main(String[] args) { //int[] order = {3, 2, 1}; int[] order = {2, 4, 5, 3, 1};

System.out.println(isOrder(order)); }

public static boolean isOrder(int[] order) { int route1 = -1, route2 = -1;   // 두 우회로에 있는 열차의 등급(현재는 비어있다.) int grade = 1;   // 현재 도착해야 하는 열차의 등급

for(int i = 0; i < order.length; i++) { // 선두 열차가 현재 최고 등급이라면 지나간다. if(order[i] == grade) { grade++; }           // 처음 우회로에 현재 최고 등급의 열차가 있으면 지나간다. else if(route1 == grade) { route1 = -1; grade++; }           // 다음 우회로에 현재 최고 등급의 열차가 있으면 지나간다. else if(route2 == grade) { route2 = -1; grade++; }           // 처음 우회로가 비어있으면 거기로 보낸다. else if(route1 == -1) { route1 = order[i]; }           // 두번째 우회로가 비어있으면 거기로 보낸다. else if(route2 == -1) { route2 = order[i]; }           // 위의 모든 경우가 아니라면 순서대로 보내는 것은 불가능이다. else { return false; }       }

// 모든 열차가 지나갔다면 순서대로 보내는 것이 성공했다. return true; } } code