문제
종현이는 자신의 커다란 사각형 모양의 부지가 너무 넓어 효율적으로 관리하기 어렵다는 사실을 깨달았다. 그는 부지를 더 작은 영역으로 나누어 관리하기 위해 수직(남북 방향) 울타리와 수평(동서 방향) 울타리를 설치했다.
커다란 부지는 꼭짓점이 과 인 직사각형 모양이다. 종현이는 서로 다른 위치 ()에 개의 수직 울타리()를 설치했다. 각 수직 울타리는 부터 까지 이어진다. 또한, 서로 다른 위치 ()에 개의 수평 울타리()를 설치했다. 각 수평 울타리는 부터 까지 이어진다. 모든 수직 울타리는 모든 수평 울타리와 교차하며, 결과적으로 부지는 총 개의 작은 영역으로 나뉜다.
불행히도 종현이는 울타리에 문을 만드는 것을 완전히 잊어버렸다. 이대로라면 각 영역에 갇힌 사람들이 다른 영역으로 이동하거나 부지 전체를 돌아다니는 것이 불가능하다! 종현이는 인접한 두 영역 사이의 울타리 일부를 제거하여 사람들이 모든 영역 사이를 자유롭게 이동할 수 있도록 하려 한다. 그는 인접한 두 영역을 골라 그 사이를 가로막는 울타리 구간을 통째로 제거할 수 있다. 울타리를 제거한 후에는 사람들이 이 개방된 틈을 통해 인접한 영역으로 이동할 수 있으며, 최종적으로 부지의 어느 곳이든 갈 수 있어야 한다.
예를 들어, 종현이가 아래와 같이 울타리를 설치했다고 하자.
+---+--+
| | |
+---+--+
| | |
| | |
+---+--+
종현이는 다음과 같이 울타리의 일부 구간들을 제거하여 모든 곳을 연결할 수 있다.
+---+--+
| |
+---+ +
| |
| |
+---+--+
종현이가 목표를 달성하기 위해 제거해야 하는 울타리 길이의 합의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 이 공백으로 구분되어 주어진다. (; )
이어서 개의 줄에 수직 울타리의 위치를 나타내는 이 한 줄에 하나씩 주어진다. ()
그 다음 개의 줄에 수평 울타리의 위치를 나타내는 이 한 줄에 하나씩 주어진다. ()
출력
종현이가 제거해야 하는 울타리 길이의 최솟값을 출력한다. 결과값이 32비트 정수 범위를 초과할 수 있으므로 C/C++에서는 long long과 같은 64비트 정수형을 사용해야 한다.
예제 입력 1
15 15 5 2
2
5
10
6
4
11
3
예제 출력 1
44
코드를 제출하려면 로그인이 필요합니다.
로그인