값 바꿔 정렬하기
면접 대비시간 제한3초메모리 제한1024 MB
배열 A와 집합 B가 주어질 때, B의 값으로 A의 원소를 최소 몇 개 바꿔야 A가 정렬되는지 구합니다. 불가능하면 -1을 출력합니다.
문제
정수로 이루어진 배열 와 정수 집합 가 주어진다. 와 의 모든 수는 서로 다르다. 목표는 를 정렬된 배열로 만드는 것이다. 이를 위해 에서 수를 하나 골라 의 임의의 원소를 그 수로 바꿀 수 있다. 이 연산은 몇 번이든 수행할 수 있지만, 의 각 원소는 최대 한 번만 사용할 수 있다.
를 정렬된 배열로 만드는 데 필요한 연산 횟수의 최솟값을 구하라. 만들 수 없다면 그 사실을 알아내라.
입력
첫째 줄에 와 의 크기 , 이 주어진다 ().
둘째 줄에 이 주어진다.
셋째 줄에 이 주어진다.
개의 모든 원소는 서로 다르고, 양의 정수이며, 를 넘지 않는다.
출력
를 정렬된 배열로 만들 수 없으면 을 출력한다. 그렇지 않으면 필요한 연산 횟수의 최솟값을 출력한다.
힌트
세 예시 모두 이 문제이므로, 둘 중 적어도 하나는 바꿔야 한다.
첫 번째 예시에서는 을 로 바꿔 줄일 수 있지만, 그러면 다른 쪽이 깨지므로 해가 없다.
두 번째 예시에서는 로 깨진 쪽을 고칠 수 있다. 연산 2번보다 적게는 불가능하다.
세 번째 예시에서는 마지막 원소를 키울 수 있고, 그러면 연산 1번으로 가 정렬된다.