탐색은 주어진 데이터에서 원하는 데이터를 찾아내는 알고리즘을 말한다.
DFS , BFS , 이진탐색이 있다.
이론
📖 DFS (깊이우선탐색)
문제풀이
📖 백준 11724 (🔗백준 11724 문제)
✏ 연결요소는 에지로 연결된 노드의 집합. 한 번의 DFS가 끝날 때까지 탐색한 모든 노드의 집합을 하나의 연결요소로 판단.
✏ 연결요소의 개수 = 모든 노드를 탐색하는 데 실행한 DFS의 실행횟수.
#연결요소 = 에지로 연결된 노드의 집합, DFS가 끝날때까지 탐색한 모든 노드의 집합을 하나의 연결요소로 판단.
#DFS 총 N번 수행 -> 연결요소개수 = 2개
import sys
sys.setrecursionlimit(10000)
input=sys.stdin.readline
n,m=map(int,input().split())
arr=[[] for i in range(n+1)]
visit=[0]*(n+1)
count=0
def DFS(n):
visit[n]=1
for i in arr[n]:
if not visit[i]:
DFS(i)
for i in range(m):
u,v=map(int,input().split())
arr[u].append(v)
arr[v].append(u)
for i in range(1,n+1):
if not visit[i]:
count+=1
DFS(i)
print(count)
📖 백준 2023 (🔗 백준 2023 문제)
✏ 소수판별함수, DFS 함수 작성.
📍 시간초과에 유의 -> 소수판별함수 작성에 주의.
#소수는 약수가 1과 자기 자신인 수.
import sys
sys.setrecursionlimit(10000)
input=sys.stdin.readline
n=int(input())
def prime(num):
for i in range(2,int(num/2+1)):
if(num%i==0):
return False
return True
def DFS(a):
if(len(str(a))==n):
print(a)
else:
for i in range(1,10):
if (i%2==0):
continue
if (prime(a*10+i)):
DFS(a*10+i)
# 일의 자리 소수 (2,3,5,7)
DFS(2)
DFS(3)
DFS(5)
DFS(7)
◼ 참고사항