알고리즘 공부할 때
백준 온라인 저지 : 삼성 SW 역량테스트 대비 문제집 제공
프로그래머스 : 카카오 공채 문제집 제공
삼성전자 : DFS/BFS를 활용해야 하는 탐색과 시뮬레이션 문제 유형을 자주 출제한다. (상시 SW 역량테스트 A형 문제와 유사하게 출제 된다.)
복잡도
알고리즘의 성능을 나타내는 척도
시간 복잡도
int arr[5] = [3,5,1,2,4];
int summary = 0;
// 모든 데이터를 하나씩 확인하며 합계를 계산
for(int i=0;i<5;i++){
summary += i;
}
// 결과 출력
printf("%d",summary);
N개의 데이터가 있을 때, 모든 데이터의 값을 더한 결과를 출력하는 프로그램이다.
위 예에서는 5개의 데이터를 받아 차례로 5회 더해준다.
이때 연산 횟수는 N에 비례하는 것을 알 수 있다.
시간복잡도 : O(N)이다.
int a = 5;
int b = 7;
printf("%d",a+b);
a와 b에 값을 대입하는 대입 연산과 출력 함수를 무시하고 보면, 이 소스코드의 연산 횟수는 1이다.
시간복잡도 : O(1)이다.
int arr[5] = [3,5,1,2,4];
int summary = 0;
// 모든 데이터를 하나씩 확인하며 합계를 계산
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
summary += i*j;
}
}
// 결과 출력
printf("%d",summary);
데이터의 개수가 N개일 때, O(N^2)의 시간 복잡도를 가진다.
소스코드가 내부적으로 다른 메서드를 호출한다면 내부 메서드의 시간복잡도까지 고려해야 한다.
빅오 표기법 | 명칭 |
---|---|
O(1) | 상수 시간(Constant time) |
O(logN) | 로그 시간(Log time) |
O(N) | 선형 시간 |
O(NlogN) | 로그 선형 시간 |
O(N^2) | 이차 시간 |
O(N^3) | 삼차 시간 |
O(2^n) | 지수 시간 |
공간 복잡도
int a[2000][2000] 16KB
알고리즘 문제를 풀 때 단순히 '복잡도'라고 하면 보통은 시간 복잡도를 의미한다.
코딩 테스트에서는 주로 기초 알고리즘에 기반하는 문제가 출제된다.
가장 출제 빈도가 높은 문제 : 그리디, 구현, DFS/BFS를 활용한 탐색 문제이다.
출제되더라도 난이도가 높지 않은 경향이 있는 문제 : 다이나믹 프로그래밍, 그래프 이론 문제
일반적으로 알고리즘 코딩 테스트는 2 ~ 5 시간 가량의 제한된 시험 시간에 8개 이하의 문제를 푸는 형태로 출제된다.
참고 자료