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
- flatfileitemwriter
- 스프링배치 메타테이블
- step 여러개
- executioncontext 변수 공유
- step 값 공유
- spring batch 변수 공유
- 스프링배치 csv
- job parameter
- 마이바티스 트랜잭션
- api 아이템 리더
- 스프링배치 엑셀
- abstractpagingitemreader
- JSONObject 분할
- aop proxy
- stepexecutionlistener
- executioncontext
- Spring Batch
- 스프링 배치 5
- 선언적 트랜잭션 관리
- 트랜잭션 분리
- JSON 분할
- 스프링 트랜잭션 관리
- spring batch 5
- mybatis
- JSONArray 분할
- JSON 분리
- 읽기 작업과 쓰기 작업 분리
- 아이템 리더 페이징 처리
- step 사이 변수 공유
- 아이템 리더 커스텀
Archives
- Today
- Total
ebson
boj.kr/1707 이분 그래프 (gold4) 파이썬 풀이 본문
시작노드를 인덱스로 하고 인접노드를 요소로 갖는 1. graph 리스트와
이분 그래프 여부를 판단하는 2. 플래그 변수를 사용한 풀이이다.
3. sys.stdin.readline 으로 빠른 입력 받기를 사용해야 시간초과 나지 않는다.
풀이1 - DFS 활용
import sys
sys.setrecursionlimit(10**6)
N = int(input())
input = sys.stdin.readline
def dfs(node):
global flag
for neighbor in graph[node]:
if (visited[neighbor] == -1):
visited[neighbor] = 1 if (visited[node] == 2) else 2
dfs(neighbor)
else:
if visited[node] == visited[neighbor]:
flag = False
return
for _ in range(N):
flag = True
V, E = map(int, input().split())
visited = [-1] *(V+1)
graph = [[] for _ in range(V+1)]
for _ in range(E):
start, end = map(int, input().split())
graph[start].append(end)
graph[end].append(start)
for i in range(1, V+1):
if (visited[i] == -1):
visited[i] = 1
dfs(i)
if (flag == False):
break
print("YES" if flag else "NO")
풀이2 - BFS 활용
import sys
input = sys.stdin.readline
from collections import deque
def bfs(node):
dq = deque()
dq.append(node)
while dq:
cur = dq.popleft()
for nxt in graph[cur]:
if visited[nxt] == -1:
visited[nxt] = 1 if visited[cur] == 2 else 2
dq.append(nxt)
elif visited[nxt] == visited[cur]:
return False
return True
T = int(input())
for _ in range(T):
V, E = map(int, input().split())
graph = [[] for _ in range(V+1)]
for _ in range(E):
s, e = map(int, input().split())
graph[s].append(e)
graph[e].append(s)
visited = [-1 for _ in range(V+1)]
flag = True
for node in range(1, V+1):
if visited[node] == -1:
if not bfs(node):
flag = False
print("YES" if flag else "NO")
'ALGORITHM STUDY WITH PYTHON > BFS | DFS' 카테고리의 다른 글
boj.kr/1967 트리의 지름 (gold4) 파이썬 풀이 (0) | 2023.05.02 |
---|---|
boj.kr/2573 빙산 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
boj.kr/1987 알파벳 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
boj.kr/16234 인구 이동 (gold5) 파이썬 풀이 (0) | 2023.04.29 |
boj.kr/13549 숨바꼭질 3 (gold5) 파이썬 풀이 (0) | 2023.04.29 |