만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

선택된 부분 행렬

면접 대비

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

요약
각 N x N 행렬에서 서로 다른 값이 가장 적은 M x M 부분 행렬을 찾고, 동률이면 내림차순 값 목록이 더 큰 쪽, 그다음 행과 열이 작은 쪽을 고른다.
난이도

쉬움10점 중 3점

유형
완전 탐색, 구현, 행렬, 정렬
정답자
아직 제출이 없습니다

문제

주어진 N×NN \times N 행렬에서 서로 다른 값의 개수가 가장 적은 M×MM \times M 부분 행렬을 찾으세요. 서로 다른 값의 개수가 같은 부분 행렬이 여러 개라면 다음 규칙으로 우선순위를 정합니다.

  1. 서로 다른 값의 개수가 더 적은 것이 우선합니다.
  2. 그래도 같다면, 각 부분 행렬의 서로 다른 값을 내림차순으로 나열한 목록을 앞에서부터 하나씩 비교하여, 처음으로 값이 달라지는 위치에서 더 큰 값을 가지는 부분 행렬이 우선합니다.
  3. 서로 다른 값의 집합까지 완전히 같다면, 왼쪽 위 칸의 행 번호가 더 작은 것을, 행 번호도 같다면 열 번호가 더 작은 것을 선택합니다.

행렬의 인덱스는 1부터 시작합니다.

예를 들어 다음 4×44 \times 4 행렬을 생각해 봅시다.

3 9 9 9
3 9 9 2
3 9 9 2
2 5 5 2

가능한 3×33 \times 3 부분 행렬은 네 개입니다.

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입니다.

입력

입력은 하나 이상의 테스트 케이스로 이루어지며 파일 끝까지 계속됩니다. 각 테스트 케이스의 첫 줄에는 두 정수 NN (1≤N≤101 \le N \le 10, 행렬의 크기)과 MM (1≤M≤N1 \le M \le N, 선택할 부분 행렬의 크기)이 주어집니다. 이어지는 NN개의 줄에는 각각 공백으로 구분된 NN개의 정수가 주어져 행렬을 나타냅니다. 행렬의 각 원소는 00 이상 99 이하의 정수입니다.

출력

각 테스트 케이스마다 선택된 부분 행렬의 왼쪽 위 인덱스(행과 열)를 공백 하나로 구분하여 한 줄에 출력합니다.

예제1

  1. 예제 1

    입력
    4 3
    3 9 9 9
    3 9 9 2
    3 9 9 2
    2 5 5 2
    10 2
    1 5 7 8 2 3 3 3 1 7
    2 2 3 6 3 7 3 2 3 1
    5 9 3 5 7 0 4 6 9 1
    1 0 3 4 2 6 4 3 9 0
    7 4 9 9 5 4 6 2 1 5
    5 6 9 9 6 6 3 8 0 8
    4 3 3 5 2 1 7 6 4 1
    6 5 9 5 0 3 1 8 8 6
    2 2 2 8 0 1 3 5 9 0
    3 6 4 2 3 3 0 2 0 0
    
    예상 출력
    1 1
    5 3