Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 스프링배치 메타테이블
- api 아이템 리더
- JSON 분리
- 아이템 리더 페이징 처리
- JSON 분할
- 스프링배치 csv
- spring batch 변수 공유
- 읽기 작업과 쓰기 작업 분리
- 아이템 리더 커스텀
- Spring Batch
- abstractpagingitemreader
- executioncontext 변수 공유
- stepexecutionlistener
- executioncontext
- JSONArray 분할
- spring batch 5
- JSONObject 분할
- job parameter
- 스프링 배치 5
- step 값 공유
- mybatis
- 마이바티스 트랜잭션
- 스프링 트랜잭션 관리
- step 사이 변수 공유
- aop proxy
- flatfileitemwriter
- step 여러개
- 스프링배치 엑셀
- 트랜잭션 분리
- 선언적 트랜잭션 관리
Archives
- Today
- Total
ebson
boj.kr/17471 게리멘더링 (gold4) 파이썬 풀이 본문
1. 첫번째 선거구의 조합을 모두 추출하고 아래를 반복
1.1. 첫번째 선거구의 조합과 그 외 나머지 선거구의 조합을 bfs, dfs 방식 중 하나로 순회해 가능한 조합인지 검사
1.2. 가능한 조합이라면 두 선거구의 인구수 차를 저장
2. 두 선거구의 인구수 차 중 최소값을 출력, 가능한 조합이 없으면 -1을 출력
N = int(input())
nums = [0] + list(map(int, input().split()))
adj = [0] + []
for _ in range(N):
adj.append(list(map(int, input().split()))[1:])
from collections import deque
def bfs(nodes):
dq = deque()
dq.append(nodes[0])
nodes.remove(nodes[0])
while dq:
cur = dq.popleft()
for nxt in adj[cur]:
if nxt in nodes:
dq.append(nxt)
nodes.remove(nxt)
return len(nodes) == 0
import sys
sys.setrecursionlimit(10**6)
def dfs(nodes, node):
cur = node
nodes.remove(cur)
for nxt in adj[cur]:
if nxt in nodes:
dfs(nodes, nxt)
return len(nodes) == 0
from itertools import combinations
diff = []
nodes = [x for x in range(1, N+1)]
for i in range(1, N):
for combi in combinations(nodes, i):
tot = 0
if dfs(list(combi), combi[0]): #bfs(list(combi)):
rest = [x for x in nodes if x not in list(combi)]
if dfs(rest, rest[0]): #bfs(rest):
for c in list(combi):
tot += nums[c]
diff.append(abs(tot - (sum(nums)-tot)))
if len(diff) == 0:
print(-1)
else:
print(min(diff))
bfs, dfs 방식 모두 가능하나 PyPy3 으로 제출 시에는 메모리 초과하지 않으려면 bfs 방식을 사용해야 한다.
'ALGORITHM STUDY WITH PYTHON > BFS | DFS' 카테고리의 다른 글
boj.kr/2667 단지번호붙이기 (silver1) 자바 풀이 (0) | 2024.06.06 |
---|---|
boj.kr/2178 미로 탐색 (silver1) 자바 풀이 (0) | 2024.06.01 |
boj.kr/2638 치즈 (gold3) 파이썬 풀이 (0) | 2023.05.05 |
boj.kr/1325 효율적인 해킹 (silver1) 파이썬 풀이 (0) | 2023.05.04 |
boj.kr/1926 그림 (silver1) 파이썬 풀이 (0) | 2023.05.04 |
Comments