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