본문 바로가기
코드포스 - Codeforces

Codeforces Round #801 (Div. 2) A. Subrectangle Guess

by 청원뿔세포 2022. 6. 20.

[문제설명]

철수와 영희는 n개의 행과 m개의 열로 이루어진 그리드에서 게임을 한다. 이 그리드 안에는 서로다른 정수들이 있다.  i번째 행과 j번째 열에 있는 사각형은 (i, j)라고 표현할 수 있다.

철수는 h(1 <= h <= n)과 w(1 <= w <= m)인 두 수를 말하며 시작한다. 영희는 h * w 크기의 직사각형을 그리드에서 선택한다.

형식적으로 h * w의 직사각형은 (a, b)로 시작하는 사각형이다. (1 <= a <= n-h+1) (1 <= b <= m-w+1) 

영희가 선택한 직사각형은 (i, j)의 모든 사각형들을 포함한다. (a <= i <= a+h-1) (b <= j <= b+w-1) 

 

마지막으로 철수는 영희가 선택한 직사각형내에서 가장 큰 수를 말하면 이기게 된다.

철수는 큰 숫자들을 좋아하지 않기 때문에 철수가 말한 숫자로 생기게 되는 직사각형은 가능한한 작아야 한다. 하지만 동시에 철수가 항상 이긴다는 보장이 있는 직사각형이여야 한다.

 

철수가 항상 이길 수 있는 가장 작은 h, w를 구하여 h * w를 출력하시오.

t = int(input())

for _ in range(t):
    row, column = map(int,input().split())
    arr = []
    
    for _ in range(row):
        num = list(map(int, input().split()))
        arr.append(num)
        
    maximum = arr[0][0] # 최대값 초기화
    i = 0
    j = 0
    inum = 1
    jnum = 1
    
    # 최대값 구하는 동시에 최대값의 좌표를 구한다.
    for p in arr:
        for q in p:
            if maximum <= q:
                maximum = q
                i = inum
                j = jnum
            jnum+=1
        inum+=1
        jnum=1
        
    
    standardRow = (row+1)/2 # 기준 행
    standardCol = (column+1)/2 # 기준 열
	
    # h, w는 maximum이 그리드의 중앙으로부터 멀어질수록 커지게 된다.
    # 따라서 그리드의 중앙을 기준으로잡아 기준과 maximum의 차이 사이의 규칙을 찾아내 h, w를 구한다.
    h = abs(standardRow-i)+standardRow
    w = abs(standardCol-j)+standardCol
    print(int(h*w))

 

 

 

 

댓글