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
- 봄 노래
- 싸피 추천인
- 그램 액정 교체비용
- 정처기 인강 추천
- 폰 찾기
- 싸피 모집설명회 다시보기
- 폰 위치추적
- gram 액정 교체
- 삼성 싸피 지원
- 삼성 싸피
- LG 서비스센터 영업시간
- 정처기 후기
- 코딩테스트실력진단
- #코드트리 #코딩테스트 #코딩테스트실력진단
- 싸피 모집설명회
- 인디노래 추천
- 정보처리기사 준비물
- SSAFY
- 폰 도난
- 학생메일
- 폰 잃어버렸을때
- 싸피 지원자격
- 싸피 추천코드
- 정보처리기사 실기
- 코딩테스트
- 갤럭시 위치추적
- 코드트리
- 정처기 실기
- 싸피 11기
- 싸피 혜택
Archives
- Today
- Total
포포's 코딩&일상 기록
8월 3일 목요일 코테 : 알고리즘 강의 dfs 본문
No. 1
- 문제 : DFS / 그래프 탐색
https://www.codetree.ai/missions/2/problems/graph-traversal?utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
코드
내가 짠 코드 1 .. count = 0 일때... -1 또 안해주도록 장치 해놔야했음...
N,M = map(int,input().split())
# 그래프 생성 -> dfs 라서 인접리스트를 사용한다.
graph=[[] for _ in range(N)]
for _ in range(M):
x,y = map(int,input().split())
x -=1
y -=1
graph[x].append(y)
graph[y].append(x)
#print(graph)
#방문표시
visited= [0 for _ in range(N)]
#dfs 함수 생성
def dfs(vertex):
for curr_v in graph[vertex]:
if not visited[curr_v]:
visited[curr_v] = 1 # 방문함으로 표시
dfs(curr_v) # 다시 탐색
#dfs 함수 호출
dfs(0)
#최종개수 출력
count = sum(visited)
if count <= 0:
print( count )
else:
print(count-1)
답지풀이 1
일일이 세어줌..
# 변수 선언 및 입력
n, m = tuple(map(int, input().split()))
#index를 1번 부터 사용하기 위해 m+1만큼 할당합니다.
graph = [[] for _ in range(n + 1)]
visited = [False for _ in range(n + 1)]
vertex_cnt = 0
def dfs(vertex):
global vertex_cnt
# 해당 정점에서 이어져있는 모든 정점을 탐색해줍니다.
for curr_v in graph[vertex]:
# 아직 간선이 존재하고 방문한 적이 없는 정점에 대해서만 탐색을 진행합니다.
if not visited[curr_v]:
visited[curr_v] = True
vertex_cnt += 1
dfs(curr_v)
for i in range(m):
v1, v2 = tuple(map(int, input().split()))
# 각 정점이 서로 이동이 가능한 양방향 그래프이기 때문에
# 각 정점에 대한 간선을 각각 저장해줍니다.
graph[v1].append(v2)
graph[v2].append(v1)
visited[1] = True
dfs(1)
print(vertex_cnt)
강의듣고 다시 수정한 코드 -> count 값의 범위에따라 안나눠도됨.
N,M = map(int,input().split())
# 그래프 생성 -> dfs 라서 인접리스트를 사용한다.
graph=[[] for _ in range(N)]
for _ in range(M):
x,y = map(int,input().split())
x -=1
y -=1
graph[x].append(y)
graph[y].append(x)
#print(graph)
#방문표시
visited= [0 for _ in range(N)]
#dfs 함수 생성
def dfs(vertex):
visited[vertex] = 1 # 방문함으로 표시
for curr_v in graph[vertex]:
if not visited[curr_v]:
dfs(curr_v) # 다시 탐색
#dfs 함수 호출
dfs(0)
#최종개수 출력
count = sum(visited)
print( count -1 )
"""count = sum(visited)
if count <= 0:
print( count )
else:
print(count-1)"""
새롭게 알게된것
0번인덱스로 바꿀필요없이 그냥 첫째줄을 비워놓고 시작하면 숫자를 그대로 사용할수있다.
visited를 True 로 만들어주는 위치 는 두가지 가능
1. 함수 호출직전에
2. 함수호출 내부에서
주의할점
내가 짠 코드 .. count = 0 일때... -1 또 안해주도록 장치 해놔야했음... 근데이게 첫번째 정점을 방문처리해주는 코드를 빼먹어서 그랬던듯 ㅠㅠ
'코테 > 특강' 카테고리의 다른 글
(다시풀기...)8월 10일 목요일 코테 : BFS 알고리즘 강의 듣고 풀이 (0) | 2023.08.18 |
---|---|
그래프 - BFS 탐색 - 인접리스트 vs 인접행렬 (0) | 2023.08.16 |
그래프 - DFS 탐색 - 인접리스트 vs 인접행렬 (0) | 2023.08.16 |
자료구조- 인접행렬, 인접리스트 (0) | 2023.08.16 |
그래프 개념 (0) | 2023.08.14 |