고정된 파일
면접 대비시간 제한1초메모리 제한1024 MB
고정 파일과 비고정 파일의 시작 순서와 목표 순서가 주어질 때, 고정/해제 토글로 옮기는 최소 횟수를 구한다.
문제
최근에 Visual Studio의 새로운 기능인 고정된 파일(pinned files)을 알게 되었다. 고정된 파일이 어디에 쓸모가 있는지는 전혀 모르지만(친구들에게 물어봤을 때는 쥐 죽은 듯 조용했다), 그렇다고 해서 밤낮으로 파일을 고정하고 해제하는 것을 멈추지는 않는다.
Visual Studio는 현재 열려 있는 파일의 목록을 유지한다. 이 목록은 고정된 파일들로 시작하고 그 뒤에 고정되지 않은 파일들이 온다. 목록의 순서를 바꾸는 것은 클릭 앤 드래그가 아니라 파일의 고정 여부를 토글하는 것으로 이루어진다. 고정된 파일을 해제하면 목록에서 제거된 뒤 첫 번째 고정되지 않은 파일 앞에 추가된다. 고정되지 않은 파일을 고정하면 제거된 뒤 마지막 고정된 파일 뒤에 추가된다.
부터 까지 번호가 붙은 네 개의 파일을 예로 들어 보자. 시작 상태는 이고 파일 과 가 고정되어 있다. 원하는 최종 상태가 이고 파일 만 고정된 경우, 다음 다섯 번의 토글 연산으로 달성할 수 있다:
2∗ 1∗ 4 3 초기 상태 (∗는 고정된 파일)
2∗ 1∗ 3∗ 4 파일 3 고정
2∗ 1∗ 3∗ 4∗ 파일 4 고정
2∗ 3∗ 4∗ 1 파일 1 해제
2∗ 4∗ 3 1 파일 3 해제
4∗ 2 3 1 파일 2 해제
이 다섯 번의 연산은 시작 상태에서 최종 상태로 가는 최소 횟수이다.
파일의 초기 목록이 주어졌을 때, 목록의 다른 순서에 도달하는 최소 이동 횟수를 구하라. 파일에는 편의상 부터 까지 번호가 붙어 있다.
입력
입력은 네 줄로 이루어진다. 첫 번째 줄에는 두 개의 음이 아닌 정수 (고정된 파일의 수)와 (고정되지 않은 파일의 수)가 주어진다. 전체 파일 수 는 을 만족한다. 다음 줄에는 목록을 나타내는 개의 수가 주어진다. 처음 개의 수는 고정된 파일이고 다음 개의 수는 고정되지 않은 파일이다. 그다음 두 줄에는 처음 두 줄과 같은 형식으로 최종 상태가 주어진다. 시작 상태와 최종 상태의 파일 수는 같다. 부터 까지의 수는 각 파일 목록에 한 번씩 나타난다.
출력
시작 상태에서 최종 상태로 가는 최소 이동 횟수를 출력한다.