๐ณ ๊ฒ๋ฆฌ ๋งจ๋๋ง 2
๋ฐฑ์ค Gold4
๐ ์๊ณ ๋ฆฌ์ฆ
๐๐ป ๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ [๋ฌธ์ ์ ํ ์กฐ๊ฑด์ด ์์ ๋] ์จ๋ณผ๊น? ํ ์ ์๋ค.
์ฌ์ค โ์๋คโ๋ผ๋ ๊ฐ๋ ์ ์๋์ ์ด๊ธฐ์ ๊ฐ๋ ํ๊ธฐ ์ด๋ ค์ธ ์๋ ์์ง๋ง ์ด ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ด๋ณด์.
- 5 โค N โค 20
- 1 โค A[r][c] โค 100
๋ฑ ๋ด๋ ์๋ค๋ Feel์ด ์จ๋ค โฆ ๋๋ก๋ ๋จ์๋ฌด์ํ ๋ฐฉ๋ฒ์ด ํตํ๋ค.
๐ ์ค๊ณ
๋ชจ๋ x,y,d1,d2์ ๋ํ์ฌ ์ ํ๋ก์ฐ ์ฐจํธ๋ฅผ ์ํํ๋ค.
์๋ชป๋ ์ค๊ณ
Brute Force๋ฅผ ์ํํ๋ฉด์ x,y,d1,d2์ ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์กฐ๊ฑด์ ์์ธํ ๋ณด๋ฉด ์ต์ด ์ถ๋ฐ์ง๊ฐ (1,1)์ด๋ค.
Python์์๋ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ๋ (0,0)์ด ์์์ด๋ค. ๋ฐ๋ผ์ ๋๋ ์์ ์กฐ๊ฑด ์ ๋ถ์ -1 ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๋ค.
๊ทธ๋ฐ๋ฐ range ๋ฒ์๋ฅผ ์๋ชป ์ค์ ํด์ค ๊ฒ์ธ์ง ๊ณ์ ์ค๋ต์ด ์ถ๋ ฅ๋์๋ค. ๊ทธ๋์ ๋ฌธ์ ์กฐ๊ฑด์ ๊ทธ๋๋ก ๊ฐ์ ธ์ค๋
๊ธฐ์กด city 2์ฐจ์ ๋ฐฐ์ด์์ ์ธ๊ตฌ์๋ฅผ ๊ฐ์ ธ์ฌ ๋ (x,y) โก๏ธ (x-1,y-1) ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ๊ฐ์ ธ์๋ค.
๐จ๐ปโ๐ป CODE
import sys
input = sys.stdin.readline
INF = int(1e9)
# Initialize
N = int(input())
city = []
for i in range(N):
city.append(list(map(int,input().split())))
total = 0 # ์ด์
for i in range(N):
for j in range(N):
total += city[i][j]
def sol(x,y,d1,d2):
temp = [[0]*N for _ in range(N)]
# ์ ๊ฑฐ๊ตฌ 5 ์ธํ
for i in range(d1+1):
temp[x+i-1][y-i-1] = 5
temp[x+d2+i-1][y+d2-i-1] = 5
for i in range(d2+1):
temp[x+i-1][y+i-1] = 5
temp[x+d1+i-1][y-d1+i-1] = 5
max_people = -1*INF
min_people = INF
sum1 = 0
# ์ ๊ฑฐ๊ตฌ 1 ์ธํ
for i in range(1,x+d1):
for j in range(1,y+1):
if temp[i-1][j-1] == 5:
break
# ์ ๊ฑฐ๊ตฌ 1 ์ธ์
sum1 += city[i-1][j-1]
# Max Min Update
if max_people < sum1:
max_people = sum1
if min_people > sum1:
min_people = sum1
sum2 = 0
# ์ ๊ฑฐ๊ตฌ 2 ์ธํ
(์ด์ ๊ฐ์๊ฐ ์ ์ ์์์ง๋ฏ๋ก ์ญํ์ ํด์ผํจ)
for i in range(1,x+d2+1):
for j in range(N,y,-1):
if temp[i-1][j-1] == 5:
break
# ์ ๊ฑฐ๊ตฌ 2 ์ธ์
sum2 += city[i-1][j-1]
# Max Min Update
if max_people < sum2:
max_people = sum2
if min_people > sum2:
min_people = sum2
# ์ ๊ฑฐ๊ตฌ 3 ์ธํ
sum3 = 0
for i in range(x+d1,N+1):
for j in range(1,y-d1+d2):
if temp[i-1][j-1] == 5:
break
# ์ ๊ฑฐ๊ตฌ 3 ์ธ์
sum3 += city[i-1][j-1]
# Max Min Update
if max_people < sum3:
max_people = sum3
if min_people > sum3:
min_people = sum3
sum4 = 0
# ์ ๊ฑฐ๊ตฌ 4 ์ธํ
(์ด์ ๊ฐ์๊ฐ ์ ์ ์์์ง๋ฏ๋ก ์ญํ์ ํด์ผํจ)
for i in range(x+d2+1,N+1):
for j in range(N,y-d1+d2-1,-1):
if temp[i-1][j-1] == 5:
break
# ์ ๊ฑฐ๊ตฌ 4 ์ธ์
sum4 += city[i-1][j-1]
# Max Min Update
if max_people < sum4:
max_people = sum4
if min_people > sum4:
min_people = sum4
# ์ ๊ฑฐ๊ตฌ 5 ์ธ์
sum5 = total - sum1 - sum2 - sum3 - sum4
# Max Min Update
if max_people < sum5:
max_people = sum5
if min_people > sum5:
min_people = sum5
return max_people-min_people
answer = INF
for d1 in range(1,N):
for d2 in range(1,N):
for x in range(1,N-d1-d2+1):
for y in range(d1+1,N-d2+1):
answer = min(answer,sol(x,y,d1,d2))
print(answer)