시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 7 | 1 | 1 | 100.000% |
큐 Q, 스택 A, 스택 B와 다음과 같은 연산이 있다.
QA(n): Q에서 수 하나를 빼고, A에 넣는다. 이 작업을 n번 반복한다.
QB(n): Q에서 수 하나를 빼고, B에 넣는다. 이 작업을 n번 반복한다.
QQ(n): Q에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.
AQ(n): A에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.
BQ(n): B에서 수 하나를 빼고, Q에 넣는다. 이 작업을 n번 반복한다.
AB(n): A에서 수 하나를 빼고, B에 넣는다. 이 작업을 n번 반복한다.
BA(n): B에서 수 하나를 빼고, A에 넣는다. 이 작업을 n번 반복한다.
위의 연산은 n의 값에 상관없이 모두 각각 한 번으로 친다.
처음에 큐에 수가 이미 채워져 있고, 두 스택은 비어있다. 이때, 큐에 수를 오름차순으로 만들때 필요한 연산의 최솟값은 몇 번일까?
예를 들어, 큐에 수가 (4 3 1 2 0)과 같이 채워져 있다고 하자. 이때, 큐는 다음과 같이 3번만에 정렬할 수 있다. QA(2), QQ(2), AQ(2)
또, (5 4 1 3 2 0)과 같이 채워져 있다면, 4번만에 정렬할 수 있다. QB(2), QQ(1), QB(2), BQ(4)
큐에 들어있는 수를 정렬하기 위해 필요한 연산의 최솟값을 구하는 프로그램을 작성하시오.
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 숫자는 큐에 들어있는 수의 개수 N이다. 다음 N개의 수는 큐에 들어있는 수가 앞에서부터 순서대로 주어진다. 큐에 들어있는 수는 모두 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 또, 한 숫자는 한 번씩만 주어진다. N은 10을 넘지 않는다.
입력의 마지막 줄에는 0이 하나 주어진다.
각 테스트 케이스에 대해서, 큐를 정렬하는데 필요한 연산의 최솟값을 출력한다.
5 4 3 1 2 0 6 5 4 1 3 2 0 0
3 4
ICPC > Regionals > Africa and Arab > Arab Collegiate Programming Contest > 2005 Arab Collegiate Programming Contest D번