아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

2차원 최댓값 필터

면접 대비

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

요약
R행 C열 격자의 각 칸을 중심으로 경계에서 잘린 직사각형 창 안의 최댓값을 출력합니다.
난이도

보통10점 중 5점

유형
슬라이딩 윈도우, 큐, 행렬
정답자
아직 제출이 없습니다

문제

어떤 전기공학자가 2차원 신호를 거르는 효율적인 알고리즘을 만들려고 한다. 신호는 RR행 CC열의 블록으로 디지털화되어 있고, 블록마다 정수 값이 하나씩 들어 있다.

필터의 창은 직사각형이고 크기는 (2M+1)(2M+1)행 (2N+1)(2N+1)열이다. 여기서 MM과 NN은 0 이상의 정수다. 이 창이 입력 신호 전체를 훑고 지나가면서 다음 규칙에 따라 또 하나의 2차원 신호를 만든다.

  1. 창의 중심이 입력 신호의 AA행 BB열에 있으면, 창은 출력 신호의 AA행 BB열에 값 하나를 만든다.
  2. 만드는 값은 창이 덮은 영역 안에 있는 입력 값 중 최댓값이다.
  3. 창에서 입력 신호 밖으로 나간 부분은 계산에 넣지 않는다. 입력 신호 안에 들어온 부분만 본다.

행 번호와 열 번호는 모두 1부터 센다. 예를 들어 M=1M = 1, N=2N = 2이면 창의 크기는 3행 5열이다. 창의 중심이 4행 5열에 있으면 창은 3행 3열부터 5행 7열까지를 덮고, 그 영역의 최댓값이 출력 신호의 4행 5열 값이 된다. 창의 중심이 1행 2열에 있으면 창은 -1행 -1열부터 2행 4열까지 걸치지만 신호 밖은 무시하므로, 실제로 보는 값은 1행 1열부터 2행 4열까지다.

입력 신호가 주어졌을 때 이 2차원 최댓값 필터가 만드는 출력 신호를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 입력 신호의 행 수 RR과 열 수 CC가 공백으로 구분되어 주어진다. (1≤R≤10001 \le R \le 1000, 1≤C≤10001 \le C \le 1000)

둘째 줄에 MM과 NN이 공백으로 구분되어 주어진다. (0≤M≤600 \le M \le 60, 0≤N≤600 \le N \le 60) 창의 크기는 MM과 NN으로 정해지며 (2M+1)(2M+1)행 (2N+1)(2N+1)열이다.

셋째 줄부터 RR개의 줄에 입력 신호의 값이 주어진다. 각 줄에는 그 행의 값 CC개가 왼쪽부터 순서대로 공백으로 구분되어 주어진다. 각 값은 0 이상 10000 이하의 정수다.

출력

RR개의 줄에 출력 신호를 출력한다. 각 줄에는 그 행의 출력 값 CC개를 공백으로 구분해 출력한다.

예제1

  1. 예제 1

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