[๋ฐฑ์ค€/python] 17779๋ฒˆ : ๊ฒŒ๋ฆฌ๋งจ๋”๋ง 2

2021. 9. 18. 23:32

๋ฌธ์ œ

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

์žฌํ˜„์‹œ๋Š” ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ฒฉ์ž๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ์ž์˜ ๊ฐ ์นธ์€ ๊ตฌ์—ญ์„ ์˜๋ฏธํ•˜๊ณ , rํ–‰ c์—ด์— ์žˆ๋Š” ๊ตฌ์—ญ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์—ญ์„ ๋‹ค์„ฏ ๊ฐœ์˜ ์„ ๊ฑฐ๊ตฌ๋กœ ๋‚˜๋ˆ ์•ผ ํ•˜๊ณ , ๊ฐ ๊ตฌ์—ญ์€ ๋‹ค์„ฏ ์„ ๊ฑฐ๊ตฌ ์ค‘ ํ•˜๋‚˜์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค. ์„ ๊ฑฐ๊ตฌ๋Š” ๊ตฌ์—ญ์„ ์ ์–ด๋„ ํ•˜๋‚˜ ํฌํ•จํ•ด์•ผ ํ•˜๊ณ , ํ•œ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ตฌ์—ญ์€ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์—ญ A์—์„œ ์ธ์ ‘ํ•œ ๊ตฌ์—ญ์„ ํ†ตํ•ด์„œ ๊ตฌ์—ญ B๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ, ๋‘ ๊ตฌ์—ญ์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ค‘๊ฐ„์— ํ†ตํ•˜๋Š” ์ธ์ ‘ํ•œ ๊ตฌ์—ญ์€ 0๊ฐœ ์ด์ƒ์ด์–ด์•ผ ํ•˜๊ณ , ๋ชจ๋‘ ๊ฐ™์€ ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋œ ๊ตฌ์—ญ์ด์–ด์•ผ ํ•œ๋‹ค.

์„ ๊ฑฐ๊ตฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  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

์•„๋ž˜๋Š” ํฌ๊ธฐ๊ฐ€ 7×7์ธ ์žฌํ˜„์‹œ๋ฅผ ๋‹ค์„ฏ ๊ฐœ์˜ ์„ ๊ฑฐ๊ตฌ๋กœ ๋‚˜๋ˆˆ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์‹œ์ด๋‹ค.

๊ตฌ์—ญ (r, c)์˜ ์ธ๊ตฌ๋Š” A[r][c]์ด๊ณ , ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ๋Š” ์„ ๊ฑฐ๊ตฌ์— ํฌํ•จ๋œ ๊ตฌ์—ญ์˜ ์ธ๊ตฌ๋ฅผ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์ด๋‹ค. ์„ ๊ฑฐ๊ตฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ• ์ค‘์—์„œ, ์ธ๊ตฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์„ ๊ฑฐ๊ตฌ์™€ ๊ฐ€์žฅ ์ ์€ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์žฌํ˜„์‹œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. rํ–‰ c์—ด์˜ ์ •์ˆ˜๋Š” A[r][c]๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ธ๊ตฌ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์„ ๊ฑฐ๊ตฌ์™€ ๊ฐ€์žฅ ์ ์€ ์„ ๊ฑฐ๊ตฌ์˜ ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ •๋‹ต

import sys
input = sys.stdin.readline

N = int(input())
area = []
for _ in range(N):
    area.append(list(map(int, input().split())))

answer = 100*20*20  # ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๋ฆฌ์…‹

# ๊ธฐ์ค€์  (x, y) : 0 <= x < N-2, 1 <= y < N-1
for x in range(0, N-2):
    for y in range(1, N-1):
        
        # ๊ฒฝ๊ณ„์˜ ๊ธธ์ด d1, d2 : 1 <= d1 <= y, 1 <= d2 <= N-y
        for d1 in range(1, y+1):
            for d2 in range(1, N-y+1):                
                if 0 <= y-d1 and y+d2 < N and x+d1+d2 < N:  # ์ธ๋ฑ์Šค ์ฒดํฌ

                    cnt = [0, 0, 0, 0, 0]   # 0 ~ 4 ๊ตฌ์—ญ ์ธ๊ตฌ์ˆ˜ 0์œผ๋กœ ๋ฆฌ์…‹
                    
                    # ํ™•์ธํ•  ๊ตฌ์—ญ (r, c)
                    for r in range(N):
                        for c in range(N):
                            population = area[r][c]
                            
                            if r < x+d1 and c <= y:         # 0๊ตฌ์—ญ
                                if r+c >= x+y:
                                    cnt[4] += population
                                else:
                                    cnt[0] += population
                            
                            elif r <= x+d2 and y < c:       # 1๊ตฌ์—ญ
                                if r-c >= x-y:
                                    cnt[4] += population
                                else:
                                    cnt[1] += population
                            
                            elif x+d1 <= r and c < y-d1+d2: # 2๊ตฌ์—ญ
                                if r-c <= x-y+(2*d1):
                                    cnt[4] += population
                                else:
                                    cnt[2] += population
                            
                            elif x+d2 < r and y-d1+d2 <= c: # 3๊ตฌ์—ญ
                                if r+c <= x+y+(2*d2):
                                    cnt[4] += population
                                else:
                                    cnt[3] += population
                            
                            else:
                                cnt[4] += population
                    
                    answer = min(answer, max(cnt)-min(cnt))
                
                else:   # ๋งˆ๋ฆ„๋ชจ๊ฐ€ area๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
                    break

print(answer)

์ธ๋ฑ์Šค ํŽธ์˜๋ฅผ ์œ„ํ•ด ๊ตฌ์—ญ์€ (0,0)์—์„œ ์‹œ์ž‘ํ•˜๊ณ  1~5๋ฒˆ ์„ ๊ฑฐ๊ตฌ๋Š” 0~4๋ฒˆ ์„ ๊ฑฐ๊ตฌ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

 

์šฐ์„  ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด์•˜๋‹ค.

๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๊ผญ์ง€์ ์„ ๊ธฐ์ค€์  (x, y)๋กœ ์„ค์ •ํ•˜๊ณ  ๊ฒฝ๊ณ„์˜ ๊ธธ์ด d1, d2์ผ ๋•Œ์˜ ์ƒํ™ฉ์„ ์ •๋ฆฌํ•˜๋ฉด

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๊ณ  ์ขŒํ‘œ์˜ ๋ฒ”์œ„๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

answer = 100*20*20  # ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๋ฆฌ์…‹

# ๊ธฐ์ค€์  (x, y) : 0 <= x < N-2, 1 <= y < N-1
for x in range(0, N-2):
    for y in range(1, N-1):
        
        # ๊ฒฝ๊ณ„์˜ ๊ธธ์ด d1, d2 : 1 <= d1 <= y, 1 <= d2 <= N-y
        for d1 in range(1, y+1):
            for d2 in range(1, N-y+1):                
                if 0 <= y-d1 and y+d2 < N and x+d1+d2 < N:  # ์ธ๋ฑ์Šค ์ฒดํฌ

                    cnt = [0, 0, 0, 0, 0]   # 0 ~ 4 ๊ตฌ์—ญ ์ธ๊ตฌ์ˆ˜ 0์œผ๋กœ ๋ฆฌ์…‹

 

๊ฐ ๊ตฌ์—ญ์˜ ์ตœ๋Œ€ ์ธ๊ตฌ๋Š” 100์ด๊ณ  ํฌ๊ธฐ์˜ ์ตœ๋Œ€๋Š” 20*20์ด๋ฏ€๋กœ

์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ๋Œ€๊ฐ’์€ 100*20*20์ด๋ฉฐ answer๋ฅผ ์ธ๊ตฌ ์ฐจ์ด์˜ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ธฐ์ค€์ ์—์„œ ๊ฒฝ๊ณ„์˜ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉฐ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

๊ฒฝ๊ณ„ d1, d2๋Š” ์ตœ์†Œ 1 ์ด์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 

๊ธฐ์ค€์  x๋Š” 0 <= x < N-2. ๊ธฐ์ค€์  y๋Š” 1 <= y < N-1 ์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

๋ฌธ์ œ์—์„œ 1 ≤ y-d1 < y < y+d2 ≤ N ์ด๋ผ ์„ค๋ช…ํ•˜๋ฏ€๋กœ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด

๊ฒฝ๊ณ„ d1์€ 1 <= d1 <= y, ๊ฒฝ๊ณ„ d2๋Š” 1 <= d2 <= N-y ์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด ์œ„ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ์—์„œ ํŒŒ์•…ํ•œ ์ขŒํ‘œ์˜ ๋ฒ”์œ„๋ฅผ ํ† ๋Œ€๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค.

๋งŒ์•ฝ ์ธ๋ฑ์Šค๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค๋ฉด ๋”์ด์ƒ ๊ฒฝ๊ณ„๋ฅผ ๋Š˜๋ฆด ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ break ํ•œ๋‹ค.

 

cnt์—๋Š” ๊ฐ ๊ตฌ์—ญ์˜ ์ธ๊ตฌ์ˆ˜์˜ ํ•ฉ์„ ์ €์žฅํ•  ๊ฒƒ์ด๋ฏ€๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.

 

 

์ด์ œ ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ ๋Œ๋ฉฐ ์–ด๋Š ๊ตฌ์—ญ์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ๊ฐ ๊ตฌ์—ญ์˜ ์ขŒํ‘œ๊ฐ€ ์–ด๋–ค ๊ทœ์น™์ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ ค๋ณธ ๊ทธ๋ฆผ์ด๋‹ค.

ํŒŒ๋ž€ ์„ ์€ ๊ฐ ์„ ๊ฑฐ๊ตฌ์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆˆ ์„ ์ด๋‹ค.

๊ฐ ์„ ๊ฑฐ๊ตฌ ์•ˆ์—์„œ 4๋ฒˆ ์„ ๊ฑฐ๊ตฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ์—ญ (r, c)๋Š” ๋ณด๋ผ์ƒ‰ ๊ธ€์”จ์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๊ฐ–๋Š”๋‹ค.

๋ณด๋ผ์ƒ‰ ๊ธ€์”จ์˜ ๊ทœ์น™์€ ํŒŒ๋ž€ ๋™๊ทธ๋ผ๋ฏธ ์ขŒํ‘œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค.

 

(r, c)๊ฐ€ ๋„ค ๊ตฌ์—ญ ์ค‘ ์–ด๋””์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  

๋ณด๋ผ์ƒ‰ ๊ธ€์”จ์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ 4 ์„ ๊ฑฐ๊ตฌ์ธ์ง€ ์ฒดํฌํ•˜์—ฌ

ํ•ด๋‹น ์„ ๊ฑฐ๊ตฌ ์ธ๋ฑ์Šค์˜ cnt ๊ฐ’์— (r, c) ๊ตฌ์—ญ์˜ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.

 

๋ชจ๋“  ์„ ๊ฑฐ๊ตฌ์˜ ๊ณ„์‚ฐ์ด ๋๋‚ฌ์œผ๋ฉด

cnt์˜ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์˜ ์ฐจ์™€ answer์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์„ answer์— ์ €์žฅํ•œ๋‹ค.

 

728x90

BELATED ARTICLES

more