길이가 인 수열 와 길이가 인 수열 가 주어진다. 두 수열 전체를 봤을 때 동일한 값은 최대 번 등장한다.
수열 의 번째 값에서 시작하고 길이가 인 연속인 부분 수열을 뽑아냈다고 하자. 또, 수열 의 번째 값에서 시작하고 길이가 인 연속인 부분 수열을 뽑아냈다고 하자. 이 두 부분 수열에서, 동일한 위치에 동일한 값이 등장하는 횟수를 라고 부르자. ( )
모든 가능한 의 값 중 최댓값을 구하는 프로그램을 작성하라.
입력 형식
첫 줄에 수열의 길이를 나타내는 두 정수 과 이 공백으로 구분되어 주어진다. ()
그다음 줄에 수열 의 원소들의 값을 나타내는 개의 정수가 공백으로 구분되어 순서대로 주어진다.
그다음 줄에 수열 의 원소들의 값을 나타내는 개의 정수가 공백으로 구분되어 순서대로 주어진다.
모든 원소의 값은 이상 이하이며, 동일한 값은 와 를 합쳐 최대 번 등장한다.
출력 형식
첫 줄에 의 최댓값을 출력한다.
예제
입력
5 7 1 2 3 4 1 2 4 4 1 5 3 2
출력
3
예제 설명
, , 인 경우를 보자. 에서 뽑은 부분 수열은 , 에서 뽑은 부분 수열은 이다. 따라서, 동일한 자리에 동일한 값이 등장하는 경우가 , , 로 총 번이다.
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 15점
종류 2: 19점
종류 3: 28점
종류 4: 38점
모든 입력 케이스가 주어짐.
해설
길이가 각각 과 인 두 수열 에서 같은 값이 최대 3번씩 등장할 때, 같은 위치에 있는 값이 일치하는 횟수가 최대가 되도록 각 수열에서 길이가 같은 연속 부분 수열을 선택하는 문제입니다.
두 부분 수열의 시작 위치 와 길이 가 있을 때, 어떤 위치에서 값이 일치하기 위해서는 원본 수열에서 ()가 성립해야 합니다.
따라서 원본 수열에서 인덱스의 차이 가 일정한 쌍의 개수를 구해 놓으면, 시작 위치가 만큼 차이나는 부분 수열을 선택할 때의 횟수, 즉
들의 최댓값을 한 번에 알아낼 수 있습니다.
결국 값이 같으면서 인덱스 차이가 인 쌍의 수를 모든 에 대해 구하면 문제를 해결할 수 있습니다. 두 수열 를 통틀어서 같은 값이 최대 3번 등장하므로 시간에 모든 쌍을 찾을 수 있습니다.
Challenge: 같은 값이 최대 번만 등장한다는 조건이 없을 때 보다 빠르게 해결할 수 있을까요?