Roothyo
루시오의 Devlog
Roothyo
전체 방문자
오늘
어제
  • 분류 전체보기 (92)
    • ComputerScience (56)
      • 자료구조 (1)
      • 알고리즘 (6)
      • 네트워크 (12)
      • 코딩테스트 (34)
      • AI & ML (1)
      • BlockChain (1)
      • Security (1)
    • Programming Language (8)
      • JavaScript (8)
      • Python (0)
    • 서비스개발(Web, App) (18)
      • Front-End (2)
      • Back-End (8)
      • Cloud Server (2)
      • DevOps (4)
    • 프로젝트 (9)
      • UNY (4)
      • ThrowOrNot (4)
      • MoA (1)
    • 잡담 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Node
  • vmap
  • github
  • OpenVidu
  • VPAID
  • node.js
  • Socket.io
  • 프로그래머스
  • chat
  • FRONT-END
  • TLS
  • 백준
  • Vast
  • nodejs
  • 코테
  • 클라우드서버
  • 비디오광고
  • 애자일프로젝트
  • 네트워크
  • Nest.js
  • 알고리즘
  • js
  • 네트워크공부
  • JavaScript
  • 코딩테스트
  • Python3
  • level2
  • Python
  • Redis
  • 완전탐색

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Roothyo

루시오의 Devlog

ComputerScience/알고리즘

알고리즘 기초

2021. 1. 18. 00:06

### 알고리즘이란?

고대 페르시아의 수학자 알콰리즈미에서 유래되어 문제를 해결하기 위한 여러 동작들의 모임.

알고리즘을 이용하기 위해서는 복잡한 구조의 코드를 정확하게 구현할 수 있는 구현력이 필요하다.

 

### 알고리즘의 조건

- 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 한다.

- 유일성 : 각 단계마다 명확한 다음 단계를 가져야 한다.

- 입력 : 정의된 입력을 받아들일 수 있어야 한다.

- 출력 : 답으로 출력을 내보낼 수 있어야 한다.

- 유한성 : 특정 수의 작업 이후에 정지해야 한다.

- 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 한다.

 

깊이우선탐색 (Depth First Search)

- 그래프 탐색 방법의 한가지로 한 경로로 탐색하다 특정 상황에서 최대한 깊숙하게 들어가서 확인 후 다시 돌아가 다른 경로로 탐색하는 방식.

- 일반적으로 재귀함수를 이용하여 구현, Stack을 이용하여 구현하기도 함.

- 구조상 Stack Overflow에 유의해야함.

- 그래프 알고리즘에서 기초가 되는 탐색 방식으로 반드시 숙지가 필요함

- 활용 : 백트래킹, 단절선 찾기, 단절점 찾기, 위상정렬, 사이클 찾기 등

 

DFS의 순서

1. 체크인

2. 목적지에 도달했는가 (dp 리턴)

3. 연결된 곳을 순회

4. 갈 수 있는가? (dp 체크)

5., 간다.

6. 체크아웃

 

너비우선탐색 (Breadth First Search)

- 그래프 탐색 방법의 한가지로 시작노드에서 시작하여 인접한 노드를 먼저 탐색하는 방식.

- 일반적으로 Queue 자료구조를 이용하여 구현.

- 그래프 알고리즘에서 기초가 되는 탐색 방식으로 반드시 숙지가 필요함.

- BFS 활용 : 최단경로 찾기, 위상 정렬 등

 

BFS의 순서

1. 큐에서 꺼내옴

2. 목적지에 도달했는가?

3. 연결된 곳을 순회

4. 갈 수 있는가?

5. 체크인 & 큐에 넣음.

 

정렬된 데이터의 특성.

- 정렬은 데이터의 크기 정보(값)를 위치 정보(인덱스)로 확장시킴.

- 정렬된 데이터에서 어떤 위치의 데이터 값을 알면, 그 데이터 앞의 데이터와 뒤의 데이터의 크기를 유추 할 수 있음.

- 정렬된 데이터에서 동일 값을 가지는 데이터는 반드시 인접함

- 데이터 중 K번째로 작은(큰) 값에 빠르게 접근 가능

- 데이터의 속성값이 여러 가지인 경우 정렬의 기준이 여러 가지가 될 수 있음.

 

1. 유일성 검사 / 중복 제거 : 인접한 데이터와의 비교만으로 유일성 검사 및 중복 제거가 가능

2. 빈도 구하기 : 정렬된 데이터를 한번씩만 확인하면 각 숫자의 빈도 수를 확인 가능

3. 합집합 / 교집합 구하기 : 정렬된 두 데이터 집합에서도 정렬된 데이터의 특징을 이용.

4. 이분 탐색 : 찾고자 하는 데이터의 범위를 1/2로 줄여나가며 탐색

5. Compare 함수의 활용 : 표준 라이브러리의 정렬은 Compare 함수를 이용하여 정렬 기준을 재정의하여 사용

- Comparable을 상속하는 방식

class Person implements Comparable<Person>{
//class Person {
	int num;
	int count;
	int timeStamp;
	
	public Person(int num, int count, int timeStamp) {
		this.num = num;
		this.count = count;
		this.timeStamp = timeStamp;
	}
    
	@Override
	public int compareTo(Person o) {
		if(this.num < o.num) {
			return -1;
		}
		// 0 = Same = 바꾸지 않음.
		else if (this.num == o.num) {
			return 0;
		}
		// 1 = wrong order
		else {
			return 1;
		}
	}
}

- Comparator 객체를 생성하는 방식

list.sort(new Comparator<Person>() {
	@Override
    public int compare(Person o1, Person o2) {
    	if(o1.count < o2.count) {
    		return -1;
    	}
    	else if (o1.count == o2.count) {
    		if(o1.timeStamp < o2.timeStamp) {
    			return -1;
    		}
    		else if (o1.timeStamp == o2.timeStamp) {
            	return 0;
            }
            else {
            	return 1;
            }
    	}
    	else {
    		return 1;
    	}
    }
});

 

더보기

관련 문제

- 3425 고스택

- 3055 탈출

- 1062 가르침

- 1713 후보추천하기

- 1103 게임

- 1039 교환

- 1920 수 찾기

- 9663 N-Queen

- 1759 암호 만들기

- 2580 스도쿠

- 1339 단어 수학

- 15686 치킨 배달

 

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

최소스패닝트리(Minimum Spanning Tree) - 프림 알고리즘, 크루스칼 알고리즘  (0) 2022.04.04
Python 정규표현식(regex) 정리하기 - 1  (0) 2022.02.22
그래프  (0) 2021.01.21
정수론과 조합론  (0) 2021.01.19
자료구조  (0) 2021.01.19
    'ComputerScience/알고리즘' 카테고리의 다른 글
    • Python 정규표현식(regex) 정리하기 - 1
    • 그래프
    • 정수론과 조합론
    • 자료구조
    Roothyo
    Roothyo
    개발 관련 지식 포스팅/ 잡담 블로그 입니다. 반갑습니다! (github : https://github.com/geun9716)

    티스토리툴바