학습내용
- 의사 코드(pseudocode) 작성법
- 시간 복잡도(Time Complexity)
- 탐욕 알고리즘(Greedy)
- 완전 탐색 알고리즘(Brute-Force Algorithm)
- 이진 탐색 알고리즘(Binary Search Algorithm)
- Algorithm with Math (순열 / 조합)
내가 생각한 포인트 & 느낀점
- 알고리즘 문제에 대한 효율적인 해답은
시간 복잡도
를 고려한다는 의미이다. 문제에 대한 해답을 찾는 것도 중요하지만, 시간 복잡도를 고려하여 알고리즘 로직을 구현하는 것이 중요하다.
Greedy
의 주의할 점 - 앞의 선택이 이후의 선택에 영향을 주지 않아야 한다. 문제에 대한 최종 해결 방법은 부분 문제에 대한 최적 문제 해결 방법으로 구성되어야 한다.
Brute-Force Algorithm
문제가 복잡해질수록 기하급수적으로 많은 자원을 사용하는 단점이 있으므로, 제한적으로 사용한다.
- 프로세스 속도를 높이는데 사용할 수 있는 다른 알고리즘이 없을 때
- 문제를 해결하는 여러 솔루션이 있고 각 솔루션을 확인해야 할 때
Binary Search Algorithm
배열에만 구현할 수 있고, 정렬되어 있어야만 구현할 수 있다.
순열과 조합
은 반복문으로 구현할 수도 있지만, 개수가 많아 반복문이 너무 많이 사용되는 경우나, 뽑아야 되는 개수가 n개처럼 변수로 들어왔을 때 대응이 어렵다. 재귀
를 사용한 순열과 조합 코드 구현 연습이 많이 필요하다. 기본적인 구현 코드를 템플릿화해서 여러 문제에 응용하여 구현해야겠다.