Gridev의 프로토콜
시간 제한2초메모리 제한512 MB
N×N 격자에 오류 M개가 있을 때, 오류가 K개 이하인 행이나 열을 지우는 작업을 최소 몇 번 해야 모든 오류를 없앨 수 있는지 구합니다. 불가능하면 -1을 출력합니다.
문제
성준이는 무슨 문제든 척척 풀어내는 훌륭한 로봇이다. 이를 시샘한 근수는 성준이가 자는 동안 그의 회로판을 망가뜨렸다.
다행히 성준이에게는 자가 치유 프로토콜이 있어, 이를 이용해 스스로를 고치려고 한다. 성준이의 회로판은 격자판이며, 현재 개의 좌표 에 오류가 있다. 성준이는 다음 두 가지 행동을 반복할 수 있다.
- 오류가 개 이하인 모든 가로줄에서, 그 줄에 있는 오류를 전부 제거한다. 오류가 개를 넘는 가로줄의 상태는 바뀌지 않는다.
- 오류가 개 이하인 모든 세로줄에서, 그 줄에 있는 오류를 전부 제거한다. 오류가 개를 넘는 세로줄의 상태는 바뀌지 않는다.
성준이는 모든 오류를 제거해 빨리 치유하고, 자신을 망가뜨린 근수에게 복수하고 싶어 한다. 최소한의 행동으로 모든 오류를 제거하는 방법을 구해보자.
입력
첫째 줄에 회로판의 크기 , 오류의 개수 , 한 줄에서 치유할 수 있는 오류의 최대 개수 가 공백으로 구분되어 주어진다. ()
둘째 줄부터 번째 줄까지 오류의 위치 가 공백으로 구분되어 주어진다. ()
오류의 위치는 중복되어 주어지지 않는다.
출력
성준이가 모든 오류를 제거하는 데 필요한 최소 행동 수를 출력한다. 어떤 방법으로도 모든 오류를 제거할 수 없다면 -1을 출력한다.