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
- JSON 분리
- spring batch 변수 공유
- spring batch 5
- step 사이 변수 공유
- 스프링배치 메타테이블
- 스프링 배치 5
- stepexecutionlistener
- executioncontext
- aop proxy
- abstractpagingitemreader
- 아이템 리더 페이징 처리
- api 아이템 리더
- job parameter
- 트랜잭션 분리
- 선언적 트랜잭션 관리
- 아이템 리더 커스텀
- mybatis
- JSONArray 분할
- step 여러개
- JSON 분할
- step 값 공유
- 스프링배치 엑셀
- 스프링 트랜잭션 관리
- 마이바티스 트랜잭션
- executioncontext 변수 공유
- JSONObject 분할
- Spring Batch
- flatfileitemwriter
- 스프링배치 csv
- 읽기 작업과 쓰기 작업 분리
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 |
Comments