선택된 부분 행렬
면접 대비시간 제한1초메모리 제한128 MB
각 N x N 행렬에서 서로 다른 값이 가장 적은 M x M 부분 행렬을 찾고, 동률이면 내림차순 값 목록이 더 큰 쪽, 그다음 행과 열이 작은 쪽을 고른다.
문제
주어진 행렬에서 서로 다른 값의 개수가 가장 적은 부분 행렬을 찾으세요. 서로 다른 값의 개수가 같은 부분 행렬이 여러 개라면 다음 규칙으로 우선순위를 정합니다.
- 서로 다른 값의 개수가 더 적은 것이 우선합니다.
- 그래도 같다면, 각 부분 행렬의 서로 다른 값을 내림차순으로 나열한 목록을 앞에서부터 하나씩 비교하여, 처음으로 값이 달라지는 위치에서 더 큰 값을 가지는 부분 행렬이 우선합니다.
- 서로 다른 값의 집합까지 완전히 같다면, 왼쪽 위 칸의 행 번호가 더 작은 것을, 행 번호도 같다면 열 번호가 더 작은 것을 선택합니다.
행렬의 인덱스는 1부터 시작합니다.
예를 들어 다음 행렬을 생각해 봅시다.
3 9 9 9
3 9 9 2
3 9 9 2
2 5 5 2
가능한 부분 행렬은 네 개입니다.
S1 (왼쪽 위 1, 1) — 서로 다른 값 {9, 3}
3 9 9
3 9 9
3 9 9
S2 (왼쪽 위 1, 2) — 서로 다른 값 {9, 2}
9 9 9
9 9 2
9 9 2
S3 (왼쪽 위 2, 1) — 서로 다른 값 {9, 5, 3, 2}
3 9 9
3 9 9
2 5 5
S4 (왼쪽 위 2, 2) — 서로 다른 값 {9, 5, 2}
9 9 2
9 9 2
5 5 2
S1과 S2는 서로 다른 값이 2개로 S4(3개)나 S3(4개)보다 적습니다. S1의 목록 (9, 3)과 S2의 목록 (9, 2)를 비교하면 첫 번째 값은 같고 두 번째 값에서 S1이 더 크므로 S1이 S2보다 앞섭니다. 전체 순위는 S1, S2, S4, S3이며, 따라서 선택되는 부분 행렬은 S1입니다.
입력
입력은 하나 이상의 테스트 케이스로 이루어지며 파일 끝까지 계속됩니다. 각 테스트 케이스의 첫 줄에는 두 정수 (, 행렬의 크기)과 (, 선택할 부분 행렬의 크기)이 주어집니다. 이어지는 개의 줄에는 각각 공백으로 구분된 개의 정수가 주어져 행렬을 나타냅니다. 행렬의 각 원소는 이상 이하의 정수입니다.
출력
각 테스트 케이스마다 선택된 부분 행렬의 왼쪽 위 인덱스(행과 열)를 공백 하나로 구분하여 한 줄에 출력합니다.