코드를 보기 좋게 정렬하기

시간 제한1초메모리 제한128 MB

요약
각 줄의 현재 탭 수를 목표 탭 수로 바꾸기 위해 연속 구간에 +1 또는 -1을 적용하는 최소 연산 횟수를 구하는 문제이며, 감소 연산은 값이 0 미만이 되지 않아야 합니다.
난이도

보통10점 중 6점

유형
그리디, 배열, 누적 합
정답자
아직 제출이 없습니다

문제

한 개발자가 작은 회사에서 소스 코드의 들여쓰기를 정리하고 있다. 들여쓰기란 각 줄 앞에 탭 문자를 넣어 줄의 깊이를 나타내는 것이다. 사용하는 편집기는 연속된 여러 줄을 한꺼번에 선택한 뒤, 선택한 모든 줄의 앞에 탭 하나를 추가하거나 삭제할 수 있다.

코드는 총 N줄이다. 각 줄의 현재 탭 개수와 목표 탭 개수가 주어진다. 한 번의 편집은 다음 두 단계로 이루어진다.

  • 연속된 줄 하나 이상을 선택한다.
  • 선택한 모든 줄의 앞에 탭 1개를 추가하거나, 선택한 모든 줄에서 탭 1개를 삭제한다.

선택한 줄의 수와 관계없이 위 작업 전체를 한 번의 편집으로 센다. 단, 선택한 줄 중 탭이 하나도 없는 줄이 있으면 탭을 삭제할 수 없다.

모든 줄의 탭 개수를 목표 상태로 바꾸는 데 필요한 편집 횟수의 최솟값을 구하시오.

입력

첫째 줄에 줄의 개수 N(1 <= N <= 1,000)이 주어진다.

둘째 줄에는 1번 줄부터 N번 줄까지 현재 탭 개수가 순서대로 주어진다. 각 값은 0 이상 80 이하의 정수이다.

셋째 줄에는 1번 줄부터 N번 줄까지 목표 탭 개수가 순서대로 주어진다. 각 값도 0 이상 80 이하의 정수이다.

출력

모든 줄의 들여쓰기를 목표 상태로 만드는 데 필요한 편집 횟수의 최솟값을 출력한다.

예제3

  1. 예제 1

    입력
    3
    3 4 5
    6 7 8
    
    예상 출력
    3
    
  2. 예제 2

    입력
    4
    1 2 3 4
    3 1 1 0
    
    예상 출력
    6
    
  3. 예제 3

    입력
    4
    5 4 5 5
    1 5 0 1
    
    예상 출력
    10