알고리즘

[알고리즘] 알고리즘이란 ? / 알고리즘의 종류

2022. 5. 14. 10:59
목차
  1. 알고리즘이란?
  2. 알고리즘 공부 방향
  3. 알고리즘의 종류
  4. [비선형 구조]

알고리즘이란?

; 제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직

 

알고리즘 공부 방향

- 어떤 자료구조를 이용하여 알고리즘을 작성하는 것이 좋을 지

- 작은 공간 + 빠른 시간안에 효율적으로 처리하는 것이 목표

- 인풋 사이즈 커질수록 Big O가 어떻게 변화하는지

- 자동완성, 복붙 사용 최소화할 것

- 충분한 고민 & 문제에 대한 이해/풀이 아이디어, 어려웠던 점 및 해결책 생각할 것

 

알고리즘의 종류

재귀

  • 피보나치 수열
int Fibo(int n){
	if(n==1 or n==2) return 1;
	else return Fibo(n-1)+Fibo(n-2);
}
  • 최대공약수(GCD)
int gcd(int a,int b){
	if(a%b==0) return b;
	return gcd(b,a%b);
}
  • 하노이의 탑
void hanoi(int n,int a,int b,int c){ // a에서 b를 거쳐 c로 이동 
	if(n==1) cout<<a<<" "<<c<<endl;
	else{
		hanoi(n-1,a,c,b);
		cout<<a<<" "<<c<<endl;
		hanoi(n-1,b,a,c);
	}
}

hanoi(n)=2**n-1

 

탐색

  • 선형 탐색 ; 맨 앞이나, 맨 뒤부터 순서대로 하나하나 찾아보는 알고리즘
  • 이진 탐색 ; 중간지점 선택 -> 중간지점을 기준으로 왼쪽 혹은 오른쪽만 남김 -> 남은 부분으로 반복
  • 해시 탐색 ; 값과 index를 미리 연결해 둠으로써 짧은 시간에 탐색할 수 있는 알고리즘

# 해시 함수 ; 어떤 값이 주어졌을 때, 그 값을 대표하는 값을 계산하는 함수

# 해시값 ; 해시 함수의 계산으로 나온 값

 

정렬

https://peter-coding.tistory.com/58

 

[알고리즘] 정렬(삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬)

오늘 알아볼 알고리즘은 바로 정렬 알고리즘인데요 ! 정렬 알고리즘에는 삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬 등 많은 알고리즘들이 있지만 그 중 하나의 구현 방법만 익혀두면 유용하게

peter-coding.tistory.com

 

완전 탐색

; 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법

  • 브루트 포스 ; 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과만 가져옴
  • 비트 마스크 ; 비트를 활용한 테크닉

- and(%), or(|), xor(^), not(~)

- 시프트 연산(>>,<<) ; 왼쪽/오른쪽으로 비트를 옮김 ex) 00001010<<2=101000 

-  BIT|1<<n ; BIT의 n번째 비트를 1로 변경 / BIT&~1<<n ; BIT의 n번째 비트를 0으로 변경

  • 백트래킹 ; 모든 경우의 수를 전부 고려하는 알고리즘

DFS와 BFS ; https://peter-coding.tistory.com/20?category=1278345

 

백트래킹 알고리즘

백트래킹(Back Tracking) ; 모든 경우의 수를 전부 고려하는 알고리즘 - 상태공간을 트리로 나타낼 수 있을 때 적합(트리 탐색 알고리즘) # DFS와 BFS는 그래프 순회 ▶ DFS(Depth-First Search) ; 깊이 우선 탐

peter-coding.tistory.com

  • 순열 ; 서로 다른 n개 중 r개를 골라 순서를 고려해 나열한 경우의 수

 

분할 정복

; 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 알고리즘

 

동적 계획법(DP ; Dynamic Programming)

; 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용

ex) 피보나치 수열

 

그리디

; 선택의 순간마다 당장 눈 앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법

https://peter-coding.tistory.com/17?category=1278345 

 

그리디 알고리즘

그리디(Greedy) 알고리즘(=탐욕 알고리즘) ; 선택의 순간마다 당장 눈 앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법 - 최적해를 구하는 데에 사용되는 근사적인 방법 - 여러 경

peter-coding.tistory.com

 

[비선형 구조]

트리

  • 이진 검색 트리 ; 루트 노드의 키와 찾고자 하는 값을 비교 -> 찾고자 하는 값이 작다면 왼쪽 서브 트리 탐색 / 크다면 오른쪽 서브 트리 탐색 .. 찾을 때까지 반복

https://peter-coding.tistory.com/9?category=1279953 

 

트리(Tree)

선형 구조 ; 자료를 구성하고 있는 데이터들을 순차적으로 나열 시킨 형태 ex) 큐, 스택 - 자료를 저장하고 꺼내는 것에 초점 비선형 구조 ; 데이터가 계층적으로 구성된 형태 - 표현에 초점 ex) 트

peter-coding.tistory.com

 

그래프

  • 위상 정렬 ; 비순환 방향 그래프(DAG)에서 정점을 선형으로 정렬하는 것

https://peter-coding.tistory.com/63

 

[알고리즘] 그래프

이번에 알아볼 알고리즘 중 자료구조는 그래프입니다! 그래프는 노드와 그 노드를 연결하는 간선을 하나로 모아 놓은 자료구조입니다. 그 예시로 지도, 지하철 노선도의 최단 경로, 전기 회로의

peter-coding.tistory.com

 

최단 경로

  • Floyd-Warshall
  • 다익스트라(Dijkstra)
  • Beliman-Ford

 

그 외

  • 비트 연산
  • 진수 변환
  • 재귀(Recursion)
  • 유클리드 호제법(최대공약수, 최소공배수)
  • 투포인터(슬라이딩 윈도우)
  • 조합, 순열
  • 파라메트릭 서치
  • 최장 증가 수열(LIS)
  • 최소 공통 조상(LCA)
  • Matching Parenthesis problem
  • Variables / Pointers manipulation
  • reverse linked list(duplicates, removing duplicates)
  • Custom data structures(Object oriented programming)

 

저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] 연결 리스트  (0) 2022.05.21
[알고리즘] 배열과 연결리스트  (0) 2022.05.21
[알고리즘] 정렬(삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬)  (0) 2022.05.16
[알고리즘] 자료구조란 ?  (0) 2022.05.15
[알고리즘] 백트래킹 알고리즘  (0) 2022.04.19
[알고리즘] 그리디 알고리즘  (0) 2022.04.19
[알고리즘] 트리(Tree)  (0) 2022.04.17
[알고리즘] 이진 탐색 알고리즘  (0) 2022.04.15
  1. 알고리즘이란?
  2. 알고리즘 공부 방향
  3. 알고리즘의 종류
  4. [비선형 구조]
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 정렬(삽입 정렬, 버블 정렬, 선택 정렬, 퀵 정렬)
  • [알고리즘] 자료구조란 ?
  • [알고리즘] 백트래킹 알고리즘
  • [알고리즘] 그리디 알고리즘
피터s
피터s
1년차 프론트엔드 개발자입니다 😣 아직 열심히 배우는 중이에요! 리액트를 하고있어요 :) - gueit214@naver.com - https://github.com/gueit214
피터s
피터의 성장기록
피터s
전체
오늘
어제
  • 분류 전체보기 (200)
    • 코딩 테스트 (25)
      • 프로그래머스 (16)
      • LeetCode (8)
      • 백준 (1)
    • 개발 독서 일지 (1)
    • 기업 분석 (4)
    • 개발 일지 (19)
      • 최신기술 도전기 (1)
      • 에러 처리 (5)
      • 개발 일지 (12)
    • 개발 일상 (36)
      • 개발 회고 (22)
      • 개발 이야기 (12)
      • 개발 서적 (1)
    • 취업 관련 지식 (11)
    • 알고리즘 (17)
    • WebProgramming (84)
      • WebProgramming (8)
      • HTML (5)
      • CSS (8)
      • JS (21)
      • React (40)

블로그 메뉴

  • About
  • 2022년 개발 성장기
  • 앞으로의 계획
  • github
  • 일상 blog

공지사항

인기 글

태그

  • 1일 1커밋 후기
  • 개발 일상
  • 스터디 후기
  • 카카오 채용연계형 인턴십
  • 반복문
  • 구름톤
  • KAKAO BLIND
  • BFS
  • 개발 회고
  • dfs
  • Retry
  • 개발 is life
  • 구름
  • 해커톤
  • 카카오
  • 1년 회고
  • Union-find
  • Kakao Tech Internship
  • LV2
  • 함수
  • lv3
  • 누적합

최근 댓글

최근 글

hELLO · Designed By 정상우.
피터s
[알고리즘] 알고리즘이란 ? / 알고리즘의 종류
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.