정보처리기사 정리글입니다.
2021 시나공/수제비 정보처리기사 필기 책 기반 작성하되, 주관적인 해석을 첨가하였습니다.
'시간복잡도'나 '빅오 표기법'이 어색한 분들은 시간복잡도 - 실생활 예시로 개념잡기를 추천드립니다.
0. 필기 문제 예시(요약)
- (중) 다음 자료에 대하여 00 정렬 2회전 후 결과는?
- (중) 시간 복잡도 O(N^2)의 시간이 소요되는 정렬 알고리즘은?
- (중) 00 정렬의 시간 복잡도는?
- (상) 00 정렬에 대한 설명으로 틀린 것은?
다양한 영역에서 출제되고 있다.
1. 혼자 궁금했던 것
머릿속에 알고리즘에 대한 개념이 없을 때, '모든 정렬에 그냥 시간복잡도가 가장 낮은 알고리즘을 사용하면 안되나?'라는 생각을 했었다.
좀 더 공부해보니 정렬 알고리즘을 선택하는 요인에는 시간복잡도 말고도 크게 2가지가 더 있었다.
- 공간복잡도 - 해당 정렬 로직을 수행하는 동안 사용하는 자원의 양으로 선택정렬의 경우 n이 커짐에 따라 변수가 추가되거나 하는 등 메모리 공간을 더 사용하지 않는다. 따라서 선택정렬은 공간복잡도가 O(1)이며 제한된 메모리자원에서 사용하기 좋은 정렬방식이다.
- 데이터 특성(데이터의 정렬정도) - 실무에서는 다양한 데이터 특성에 따른 정렬 알고리즘이 요구될텐데, 이 데이터 특성에 따라서도 정렬 로직을 선택해야한다. 예를들어 정렬이 거의 완료된 데이터 나열이 있다고 하자. (1 2 3 4 5 6 8 7 9 10) 우리는 이 데이터가 '거의' 정렬된 상태라는 것을 알고 일부 정렬이 덜 된 수들을 정렬하고 싶다. 이럴 때 무턱대고 O(NlogN)인 퀵정렬을 사용하면 logN으로 분할하는 이점을 가져오기 힘들고 오히려 삽입 정렬로 정렬하는 것이 시간적 물리적 자원에 유리하다.
2. (중) 문제 대비 상세 정렬 로직 외울 것들
- 기출 몇 개 풀어보니 n^2 복잡도 3형제가 가장 많이 나오더라.. 그래서 상세 정렬 로직은 위 3개만 학습
1. 삽입 정렬
71493 시작
1회전 : 2번째 값 (1)을 7과 비교하여 삽입 → 17493
2회전 : 3번째 값 (4)를 1,7과 비교하여 삽입 → 14793
3회전 : 4번째 값 (9)를 1,4,7과 비교하여 삽입 → 14793
4회전 : 5번째 값 (3)을 1,4,7,9와 비교하여 삽입 → 13479
2. 선택 정렬
- 위 표에는 'n개 레코드 중 최솟값을 찾아 첫 번째에 놓고 ...' 라고 되어있다. 이는 개념적으로 n회전 정렬 후 n번째 자리의 값까지 정렬이 됐음을 의미할 뿐이다. 각 회전간 상세 정렬 로직을 알아보자
71493 시작
1회전 : 1번 자리의 최소값을 찾는 상세 과정
1번(7)과 2번(1)을 비교하여 작은 값을 1번에 둠 → 17493
1번(1)과 3번(4)을 비교하여 작은 값을 1번에 둠 → 17493
1번(1)과 4번(9)을 비교하여 작은 값을 1번에 둠 → 17493
1번(1)과 5번(3)을 비교하여 작은 값을 1번에 둠 → 17493
-- 1번 값 정렬 완료 --
2회전 : 2번 자리의 최솟값을 찾는 상세 과정
1회전 후 값인 17493 시작
2번(7)과 3번(4)을 비교하여 작은 값을 2번에 둠 → 14793
2번(4)과 4번(9)을 비교하여 작은 값을 2번에 둠 → 14793
2번(4)과 5번(3)을 비교하여 작은 값을 2번에 둠 → 13794
-- 2번 값 정렬 완료 --
3회전 : 3번 자리의 최소값을 찾는 상세 과정
2회전 후 값인 13794 시작
3번(7)과 4번(9)을 비교하여 작은 값을 3번에 둠 → 13794
3번(7)과 5번(4)을 비교하여 작은 값을 3번에 둠 → 13497
-- 3번 값 정렬 완료 --
4회전 : 3번 자리의 최소값을 찾는 상세 과정
2회전 후 값인 13497 시작
4번(9)과 5번(7)을 비교하여 작은 값을 3번에 둠 → 13479
-- 4,5번 값 정렬 완료 --
3. 시간복잡도 별 (중) 문제 대비 표
- 복잡도별 문제는 정말 많이 나오는 것 같다.
4. 기타 - (상) 문제 대비 키워드
정렬 | 키워드 |
삽입 정렬 | n ... n-1 ... 얘기 나옴 |
쉘 정렬 | "매개변수" 어쩌고 ... 부분적으로 정렬되면 유리... |
선택 정렬 | n개의 레코드 중 '최소값'을 찾아서... |
버블 정렬 | 인접한 두 개의 레코드 ... |
퀵 정렬 | 1. 작은 값은 왼쪽 큰 값은 오른쪽에 모이도록... 2. 많은 자료이동을 없애고 하나의 파일을 부분적으로... |
힙 정렬 | 전이진 트리, 완전 이진트리 |
합병(병합)정렬 | 이미 정렬된 두 개의파일... |
기수 정렬 | "버킷" 어쩌고 |
출처 : 시나공 |
'자격증' 카테고리의 다른 글
시간복잡도 - 실생활 예시로 개념잡기 (1) | 2023.12.21 |
---|---|
#C5 2021 3회차 정보처리기사 실기 시험 후기 (0) | 2021.11.26 |
#C4 2021 3회차 정보처리기사 필기 시험 후기(+책 관련 정보) (0) | 2021.08.17 |
#C3 [정보처리기사] ISO/IEC 암기정리 (0) | 2021.07.31 |
#C1 [정보처리기사] UML 에 대하여 (0) | 2021.07.30 |