시간 제한메모리 제한제출정답맞힌 사람정답 비율
0.5 초 1024 MB194856742.138%

문제

한서는 $H$행 $W$열의 구슬 보드판을 가지고 있다. 이 보드판의 각 칸에는 구슬이 올려져 있을 수 있으며, 구슬이 놓인 칸은 1로, 비어 있는 칸은 0으로 표시된다. 보드판의 초기 상태가 주어지면, 한서는 구슬을 적당히 옮겨서 원하는 모양을 만들려고 한다. 대신 한서는 구슬을 옮기는 것이 매우 귀찮기 때문에 가능한 최소한의 움직임으로 옮기려고 한다.

한서가 구슬을 한 번 움직일 때 다음 세 가지 행동 중 하나를 할 수 있다.

  1. 구슬을 상하좌우 4방향으로 인접한 빈 칸으로 옮긴다. 단, 구슬을 보드판의 바깥으로는 옮길 수 없다.
  2. 원하는 칸에 있는 구슬을 제거하여 저장한다. 구슬을 저장할 수 있는 개수에는 제한이 없으며, 완성한 시점에서는 저장한 구슬이 없어야 한다.
  3. 저장한 구슬 중 하나를 원하는 빈 칸에 놓는다.

한서가 원하는 모양을 완성할 수 없다면 -1을 출력하고, 완성할 수 있다면 최소한으로 구슬을 움직인 횟수를 출력하라.

입력

첫 번째 줄에 보드판의 가로 길이 $W$와 세로 길이 $H$가 주어진다. $(1 ≤ W, H ≤ 100)$

두 번째 줄부터 $H$개의 줄에 걸쳐 구슬 보드판의 초기 상태가 주어진다. 각 칸은 0(빈 칸) 또는 1(구슬이 있는 칸)로 이루어져 있다.

$H+2$ 번째 줄부터 $H$개의 줄에 걸쳐 한서가 만들고 싶어 하는 모양이 주어진다. 각 칸은 0(구슬이 없어야 하는 칸) 또는 1(구슬이 있어야 하는 칸)으로 이루어져 있다.

출력

한서가 원하는 모양을 완성할 수 있는 최소한의 구슬 움직임 횟수를 출력한다.

만약 원하는 모양을 완성하는 것이 불가능하다면, -1을 출력한다.

예제 입력 1

4 3
0 0 0 0
0 1 0 0
1 0 0 0
0 0 0 1
0 0 0 0
0 0 0 1

예제 출력 1

4

예제 입력 2

3 3
1 1 0
0 0 1
1 1 0
0 0 1
1 1 0
0 0 1

예제 출력 2

-1

예제 입력 3

2 2
1 1
0 0
1 1
0 0

예제 출력 3

0

예제 입력 4

4 4
0 0 1 0
1 1 0 0
0 0 0 0
0 0 0 1
1 0 0 0
0 0 0 0
1 1 0 0
0 0 1 0

예제 출력 4

5

출처

University > 홍익대학교 > 2024 HICON 홍익대학교 프로그래밍 경진대회 H번