2학년 겨울방학이 된 지금부터는 이전보다 더욱 본격적으로 알고리즘 실력을 쌓고 코딩테스트 준비를 하려고 합니다. 코딩테스트 언어를 Java와 C++ 중 고민하다가 C++을 선택하게 되었습니다.
교내 학회 ALGOS에서도 C++로 알고리즘을 공부하고 백준을 풀고 있지만, 제 개인적으로도 공부를 해야 할 필요성을 느껴서 이지스퍼블리싱의 교재를 방학 중에 1회독해보려고 합니다. 전반적으로 문제들을 봤는데 많이 어려워서 먼저 "알고리즘에 익숙해지겠다"는 목표로 1회독을 하고, n회독 때는 온전히 제 힘으로만 풀어볼 생각입니다.
교재 : Do it! 알고리즘 코딩테스트 c++ (김종관, 이지스퍼블리싱)
공부 깃허브 : https://github.com/yeonjae02/algorithmStudy_cpp
GitHub - yeonjae02/algorithmStudy_cpp: Do it! 알고리즘 코딩테스트 C++ 을 공부하며 작성한 코드 저장소
Do it! 알고리즘 코딩테스트 C++ 을 공부하며 작성한 코드 저장소. Contribute to yeonjae02/algorithmStudy_cpp development by creating an account on GitHub.
github.com
Chap01. 어떤 알고리즘으로 풀어야 할까?
1.1 시간 복잡도 표기법 알아보기
- C++에서는 1억 번의 연산을 1초의 수행 시간으로 예측 가능
- 시간 복잡도 유형
- 빅-오메가(Ω(n)) : 최선일 때(best case)의 연산 횟수를 나타낸 표기법
- 빅-세타(θ(n)) : 보통일 때(average case)의 연산 횟수를 나타낸 표기법
- 빅-오(O(n)) : 최악일 때(worst case)의 연산 횟수를 나타낸 표기법
- 코딩테스트에서는 빅-오 표기법을 기준으로 수행시간을 계산해야 함.
1.2 시간 복잡도 활용하기
- 문제 : 백준 2750
https://www.acmicpc.net/problem/2750
2750번: 수 정렬하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
- 코드
#include <iostream>
#include <vector>
using namespace std;
// BOJ 2750
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) cin >> v[i];
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
if (v[j] > v[j + 1]) swap(&v[j], &v[j + 1]);
}
for (int i = 0; i < n; i++) cout << v[i] << "\n";
return 0;
}
- 시간 복잡도를 바탕으로 코드 로직 개선하기 : 시간 복잡도 도출 기준
- 상수는 시간 복잡도 계산 기준에서 제외
- 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다.
Chap02. 코드의 논리 오류를 어떻게 잡을까?
2.1 디버깅은 왜 중요할까?
- 디버깅(debugging) : 프로그램에서 발생하는 문법오류나 논리오류를 찾아 바로잡는 과정
-디버깅하는 법
- 코드에서 디버깅하고자 하는 줄에 중단점을 설정한다. (중단점은 여러 개 설정 가능)
- IDE의 디버깅 기능을 실행하면 코드를 1줄씩 실행하거나 다음 중단점까지 실행 가능하고 추적할 변숫값도 지정할 수있다. (변숫값이 의도대로 바뀌는지 파악)
- 변숫값 이외에도 원하는 수식을 입력해 논리 오류를 파악할 수 있다.
2.2 디버깅 활용 사례 살펴보기
- 실수하기 쉬운 4가지 오류
- 변수 초기화 오류
- 반복문에서 인덱스 범위 지정 오류
- 잘못된 변수 사용 오류
- 자료형 범위 오류
- 음수가 될 수 없는 값이 음수가 된다면 자료형을 int가 아닌 long, long long으로 변경하기
'독학 > [책] 알고리즘 코딩 테스트 (c++)' 카테고리의 다른 글
[알고리즘/코딩테스트👩💻] Do it! 알고리즘 코딩테스트 C++ 7장 정수론 (2) | 2024.01.13 |
---|---|
[알고리즘/코딩테스트👩💻] Do it! 알고리즘 코딩테스트 C++ 6장 그리디 (2) | 2024.01.13 |
[알고리즘/코딩테스트👩💻] Do it! 알고리즘 코딩테스트 C++ 5장 탐색 (2) | 2024.01.13 |
[알고리즘/코딩테스트👩💻] Do it! 알고리즘 코딩테스트 C++ 4장 정렬 (2) | 2024.01.11 |
[알고리즘/코딩테스트👩💻] Do it! 알고리즘 코딩테스트 C++ 3장 자료구조 (2) | 2024.01.11 |