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 | 31 |
Tags
- JSONArray 분할
- 무시하기
- date_format
- str_to_date
- spring reactive programming
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- 마이바티스 트랜잭션
- 스프링 배치 메타 테이블
- 스프링 웹플럭스
- 스프링 리액티브 프로그래밍
- batchInsert
- 스프링 배치 공식문서
- JSONObject 분할
- JSON 분할
- 문자형을 날짜형으로
- 스테이지에 올리기
- JSON 분해
- git stage
- 날짜형을 문자형으로
- multi update
- spring webflux
- 폐기하기
- nonblocking
- 성능개선
- JobExecutionAlreadyRunningException
- org.json
- JSON 분리
- Meta Table
- jar 소스보기
- 마리아디비
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