본문 바로가기
카테고리 없음

알고리즘 6일차

by useSword 2024. 3. 11.

백트래킹

== 탐색 알고리즘 + 조건(유망)

솔직히 재귀에다가 조건문 박으면 백트래킹이라고 생각함.

 

백트래킹 알고리즘

# 대략 이런 모습

def backtrack(이번선택):
  if 종료조건:
	  # add, print 등등
	  return
	  
  for 아래선택 in 이번선택의 아래선택들:
	  if 유망여부판단(아래선택):
	    backtrack(아래선택)
	    선택해제 # 다시 선택을 해제하는 것이 필요할 수 있음




<도전해봐야할 문제>
nQueen(https://www.acmicpc.net/problem/9663)


유먕 여부를 판단하는 함수를 만들어보자

가로축: 여왕과 같은 가로축에 여왕을 둘 수 없음
세로축: 세로축에 하나의 여왕만 존재할 수 있다.


2차원으로 진행하면 시간초과(그래도 만들어볼것)
아래처럼 정리하면 1차원으로 가능.
queens=[None, 1 , None, None]

 

시도는 해보았지만 대각선에서의 어떻게 진행해야할지 몰랐엇고 구현자체가 너무 어렵다.
강의를 들었어도 시도를 해보았지만 가로,세로,왼쪽대각선,오른쪽대각선의 규칙은 설명대로 알았지만 구현이 너무 어렵다...



깊이우선탐색 (DFS)


DFS - 탐색 알고리즘(전부 찾음)

: 저돌적인 녀석 일단 끝까지 간 다음 딴 생각
스택을 이용함

ex) 드라마 하나씩 몰아보기 == 깊이 우선 탐색 (Depth-First-Search, DFS)

BFS - 탐색 알고리즘(전부 찾음)

:차근차근 각 단계씩 살펴봄
Queue를 이용해서 탐색.

ex) 여러 드라마 하나씩 보기 == 너비 우선 탐색 (Breadth-First-Search, BFS)

탐색 알고리즘

그래프(Graph)라는 것을 탐색

그래프 : 노드, 하나의 점(Node)과 각 노드를 연결하는 간선(Edge)으로 구성된 자료구조

트리랑 비슷하게 생겼는데 트리가 그래프 안에서 하나의 형태임

 

DP: 다이나믹 프로그래밍

현실을 표현하기 위해 (자료구조) + 현실의 문제를 풀기위해 (알고리즘)


메모이제이션

계산한 결과를 적어두고 동일한 연산을 할 때 참고함.
TOPDOWN방식으로 DP문제에 적용

 

타뷸레이션

지금 당장 필요하지 않아도 일단 계산해서 메모하는 것.

DP문제의 핵심
"어떻게 이전의 사용된 값을 재활용하지?"

 

 

<알아봐야할 내용>

의사결정 공간 트리
상태 공간 트리