728x90
17779번: 게리맨더링 2
재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름
www.acmicpc.net
접근
x, y, d1, d2를 조건에 맞게 설정하고 5번 구역을 먼저 나눠준다.
그리고 다른 구역들은 5번을 경계선으로 하여 선거구 안에 있는 인원들을 더해준다.
이때 5번 쪽으로 인덱스가 증감하도록 하여 5번을 만났을 때 break를 걸어준다.
구현
import sys
input = sys.stdin.readline
def partition(x, y, d1, d2):
# 5번 표시
cache = [[0 for _ in range(N+1)] for _ in range(N+1)]
cache[x][y] = 5
for i in range(1, d1+1):
cache[x+i][y-i] = 5
cache[x+d2+i][y+d2-i] = 5
for i in range(1, d2+1):
cache[x+i][y+i] = 5
cache[x+d1+i][y-d1+i] = 5
# 1번 선거구: 1 ≤ r < x+d1, 1 ≤ c ≤ y
region1 = 0
for r in range(1, x+d1):
for c in range(1, y+1):
if cache[r][c] == 5:
break
region1 += matrix[r][c]
# 2번 선거구: 1 ≤ r ≤ x+d2, y < c ≤ N
region2 = 0
for r in range(1, x+d2+1):
for c in range(N, y, -1):
if cache[r][c] == 5:
break
region2 += matrix[r][c]
# 3번 선거구: x+d1 ≤ r ≤ N, 1 ≤ c < y-d1+d2
region3 = 0
for r in range(x+d1, N+1):
for c in range(1, y-d1+d2):
if cache[r][c] == 5:
break
region3 += matrix[r][c]
# 4번 선거구: x+d2 < r ≤ N, y-d1+d2 ≤ c ≤ N
region4 = 0
for r in range(x+d2+1, N+1):
for c in range(N, y-d1+d2-1, -1):
if cache[r][c] == 5:
break
region4 += matrix[r][c]
region5 = total - (region1+region2+region3+region4)
max_val = max(region1, max(region2, max(region3, max(region4, region5))))
min_val = min(region1, min(region2, min(region3, min(region4, region5))))
return max_val - min_val
N = int(input())
matrix = [[0]*(N+1)]
for _ in range(N):
lst = [0]
number = list(map(int, input().split()))
lst.extend(number)
matrix.append(lst)
total = 0
for y in range(1, N+1):
for x in range(1, N+1):
total += matrix[y][x]
answer = 100000000
for x in range(1, N+1):
for y in range(1, N+1):
for d1 in range(1, N+1):
for d2 in range(1, N+1):
if x+d1+d2 > N or y-d1 < 1 or y+d2 > N:
continue
answer = min(answer ,partition(x, y, d1, d2))
print(answer)
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 1463] 1로 만들기 (0) | 2021.03.03 |
---|---|
[백준 1436] 영화감독 숌 (0) | 2021.03.02 |
[백준 17144] 미세먼지 안녕! (0) | 2021.02.25 |
[백준 2947] 나무 조각 (0) | 2021.02.24 |
[백준 1244] 스위치 켜고 끄기 (0) | 2021.02.24 |