ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

17779๋ฒˆ: ๊ฒŒ๋ฆฌ๋งจ๋”๋ง 2

์žฌํ˜„์‹œ์˜ ์‹œ์žฅ ๊ตฌ์žฌํ˜„์€ ์ง€๋‚œ ๋ช‡ ๋…„๊ฐ„ ๊ฒŒ๋ฆฌ๋งจ๋”๋ง์„ ํ†ตํ•ด์„œ ์ž์‹ ์˜ ๋‹น์—๊ฒŒ ์œ ๋ฆฌํ•˜๊ฒŒ ์„ ๊ฑฐ๊ตฌ๋ฅผ ํš์ •ํ–ˆ๋‹ค. ๊ฒฌ์ œํ•  ๊ถŒ๋ ฅ์ด ์—†์–ด์ง„ ๊ตฌ์žฌํ˜„์€ ๊ถŒ๋ ฅ์„ ๋งค์šฐ ๋ถ€๋‹นํ•˜๊ฒŒ ํ–‰์‚ฌํ–ˆ๊ณ , ์‹ฌ์ง€์–ด๋Š” ์‹œ์˜ ์ด๋ฆ„

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๊ณ  ๋‚˜์„œ, ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ง€?๐Ÿ˜… ํ•˜๋ฉฐ, ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์–ด๋ณด์•˜๋‹ค. ํ•˜๋‚˜์˜ ๊ตฌ์—ญ(r, c)์„ ๊ธฐ์ค€์œผ๋กœ `r, c, d1, d2`์— ๋”ฐ๋ผ 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ์ ์ ˆํžˆ ๊ฒฝ๊ณ„๋ฅผ ์กฐ์ •ํ•˜์—ฌ, ์„ ๊ฑฐ๊ตฌ๋งˆ๋‹ค ์ตœ๋Œ€ํ•œ ๊ณตํ‰ํ•˜๊ฒŒ ์ธ์›์ด ๋‚˜๋ˆ„์–ด์ง€๋„๋ก ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

  1. ๊ธฐ์ค€์  (x, y)์™€ ๊ฒฝ๊ณ„์˜ ๊ธธ์ด d1, d2๋ฅผ ์ •ํ•œ๋‹ค. (d1, d2 ≥ 1, 1 ≤ x < x+d1+d2 ≤ N, 1 ≤ y-d1 < y < y+d2 ≤ N)
  2. ๋‹ค์Œ ์นธ์€ ๊ฒฝ๊ณ„์„ ์ด๋‹ค.
    1. (x, y), (x+1, y-1), ..., (x+d1, y-d1)
    2. (x, y), (x+1, y+1), ..., (x+d2, y+d2)
    3. (x+d1, y-d1), (x+d1+1, y-d1+1), ... (x+d1+d2, y-d1+d2)
    4. (x+d2, y+d2), (x+d2+1, y+d2-1), ..., (x+d2+d1, y+d2-d1)
  3. ๊ฒฝ๊ณ„์„ ๊ณผ ๊ฒฝ๊ณ„์„ ์˜ ์•ˆ์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ณณ์€ 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์ด๋‹ค.
  4. 5๋ฒˆ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ตฌ์—ญ (r, c)์˜ ์„ ๊ฑฐ๊ตฌ ๋ฒˆํ˜ธ๋Š” ๋‹ค์Œ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค.
    • 1๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r < x+d1, 1 ≤ c ≤ y
    • 2๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r ≤ x+d2, y < c ≤ N
    • 3๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d1≤ r ≤ N, 1 ≤ c < y-d1+d2
    • 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d2< r ≤ N, y-d1+d2 ≤ c ≤ N

 

 ์œ„์™€ ๊ฐ™์ด ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋”ฐ๋ผ, ๊ฒฝ๊ณ„ ๊ตฌ์—ญ์„ ํ‘œ๊ธฐํ•˜๊ธฐ, ๊ฒฝ๊ณ„ ๊ตฌ์—ญ์˜ ๋‚˜๋จธ์ง€ ์˜์—ญ์„ 1๋ฒˆ, 2๋ฒˆ, 3๋ฒˆ, 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ๋กœ ์„ ํƒํ•œ ํ›„ ์ตœ๋Œ€ ์ตœ์†Œ ๊ฐ’์˜ ์ฐจ๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ฆ‰, ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ ์ง€์  (r, c)๋ฅผ ์„ ํƒํ•œ ํ›„, ๊ฒฝ๊ณ„ ๊ฒฝ๊ณ„ ๊ตฌ์—ญ์— ๋”ฐ๋ผ 5๋ฒˆ ๊ตฌ์—ญ์„ ์„ค์ •ํ•˜๊ณ , ๊ทธ ์™ธ์˜ ๋‚˜๋จธ์ง€ ์˜์—ญ์˜ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin, maxsize

FIRST, SECOND, THIRD, FOURTH = 0, 1, 2, 3


def calculate(row, col, d1, d2):
    global total, answer
    zone = [0] * 4
    # ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ 1์”ฉ ์ถ”๊ฐ€
    temp = [[0] * (N + 1) for _ in range(N + 1)]
    temp[row][col] = 5
    # d1 = 2 d2 = 2
    for i in range(1, d1 + 1):
        # 1๋ฒˆ ๊ฒฝ๊ณ„ : (x, y), (x+1, y-1), ..., (x+d1, y-d1)
        temp[row + i][col - i] = 5
        # 4๋ฒˆ ๊ฒฝ๊ณ„ : (x+d2, y+d2), (x+d2+1, y+d2-1), ..., (x+d2+d1, y+d2-d1)
        temp[row + d2 + i][col + d2 - i] = 5

    for i in range(1, d2 + 1):
        # 2๋ฒˆ ๊ฒฝ๊ณ„ : (x, y), (x+1, y+1), ..., (x+d2, y+d2)
        temp[row + i][col + i] = 5
        # 3๋ฒˆ ๊ฒฝ๊ณ„ : (x+d1, y-d1), (x+d1+1, y-d1+1), ... (x+d1+d2, y-d1+d2)
        temp[row + d1 + i][col - d1 + i] = 5

    # 1๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r < x+d1, 1 ≤ c ≤ y
    for r in range(1, row + d1):
        for c in range(1, col + 1):
            if temp[r][c] == 5:
                break
            zone[FIRST] += board[r][c]

    # 2๋ฒˆ ์„ ๊ฑฐ๊ตฌ: 1 ≤ r ≤ x+d2, y < c ≤ N
    for r in range(1, row + d2 + 1):
        for c in range(N, col, -1):
            if temp[r][c] == 5:
                break
            zone[SECOND] += board[r][c]

    # 3๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d1 ≤ r ≤ N, 1 ≤ c < y-d1+d2
    for r in range(row + d1, N + 1):
        for c in range(1, col - d1 + d2):
            if temp[r][c] == 5:
                break
            zone[THIRD] += board[r][c]

    # 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ: x+d2 < r ≤ N, y-d1+d2 ≤ c ≤ N
    for r in range(row + d2 + 1, N + 1):
        for c in range(N, col - d1 + d2 - 1, -1):
            if temp[r][c] == 5:
                break
            zone[FOURTH] += board[r][c]

    fifth = total - sum(zone)

    return max(max(zone), fifth) - min(min(zone), fifth)


if __name__ == '__main__':
    N = int(input())
    board = [[]]

    for _ in range(N):
        # ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ 1์”ฉ ์ถ”๊ฐ€
        board.append([0] + list(map(int, stdin.readline().split())))

    total = sum(sum(board, []))

    answer = maxsize

    for r in range(1, N + 1):
        for c in range(1, N + 1):
            for d1 in range(1, N + 1):
                for d2 in range(1, N + 1):
                    if r + d1 + d2 > N:
                        continue
                    if 1 > c - d1:
                        continue
                    if c + d2 > N:
                        continue
                    answer = min(answer, calculate(r, c, d1, d2))

    print(answer)

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€