C/C++ 입출력
- C++의 경우 코드를 작성할 때 아래와 같은 틀에서 시작한다.
#include <iostream>
using namespace std;
int main()
{
//
return 0;
}
- c++ 속도 향상하기
ios_base::sync_with_stdio(false)
cin.tie(NULL)
// 줄바꿈 시 endl 대신 '\n' 사용
STL 라이브러리
- STL(Standard Templete Library) : 자료구조와 이에 관련된 알고리즘을 구현한 템플릿의 모음
- STL을 포함하는 C++ 표준 라이브러리
: C++ 표준 라이브러리 구성 요소
- STL Container
- STL Iterators
- STL Adapters
- STL Algorithms
- STL Function Object, Allocators
- Stream 클래스 기반의 Input/Output
- 지역화 국제화
- 문자열의 표현 및 처리
- 각종 유틸리티 클래스
- 문제 풀이 예시 : 백준 2751 수 정렬하기2 (https://www.acmicpc.net/problem/2751)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int>v;
int n, k;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> k;
v.push_back(k);
}
sort(v.begin(), v.end());
for (int i = 0; i < n; i++) cout << v[i] << "\n";
return 0;
}
복잡도
- 시간복잡도 : 프로그램의 실행을 완료하는데 걸리는 시간
- == 컴파일 시간 + 실행 시간
- 특정 알고리즘이 문제를 해결하는 데 걸리는 시간으로 연산의 횟수로 파악
- Big-O 표기법 사
C, C++을 공부한 적이 있었기 때문에 C/C++ 입출력 파트는 이미 아는 내용이었다. 마찬가지로 자료구조를 배웠기 때문에 복잡도 부분도 이미 아는 내용이었지만 STL은 이번 기회에 처음 배웠다. 사실 지금까지 스택이나 큐 등을 전부 배열로 만들고 포인터 역할을 하는 변수의 인덱스를 변경하는 방식으로만 만들어서 사용했는데 C++ STL에서는 해당 부분을 이미 내부적으로 구현해서 내가 사용만 하면 된다고 하니... 신세계였다.
글을 쓰는 지금도 STL을 사용하기 위해 노력 중이다. 사실 동적배열을 이용하다가 벡터를 사용하려고 하니 아직까지도 버벅이는 면이 없잖아 있다. 하지만 프로그래밍대회를 나가보면서 STL의 필요성을 뼈저리게 느끼고 있고 계속 의도적으로 사용하기 위해 노력 중이다. 언젠가는 능숙하게 사용할 수 있으리라 믿는다.
ALGOS 스터디의 경우 팀원들이 만든 자료를 바탕으로 스터디를 진행합니다. 해당 주차는 제가 스터디 자료를 만들지 않았기 때문에 팀원의 자료 내 표기된 모든 출처를 옮겨 작성합니다.
<출처>
ios_base::sync_with_stdio(false); cin.tie(null); 구문을 추가해주는 이유 (tistory.com)
열혈 C++ 프로그래밍 (윤성우)
파이썬으로 배우는 자료구조 프로그래밍 (유석종)
'학회&동아리 > ALGOS' 카테고리의 다른 글
[ALGOS STUDY] 2023-SUMMER DAY1 Bruteforcing, Backtracking (3) | 2023.09.01 |
---|---|
[ALGOS STUDY] 2023-1-WEEK5 정수론 (0) | 2023.09.01 |
[ALGOS STUDY] 2023-1-WEEK4 그리디 (0) | 2023.09.01 |
[ALGOS STUDY] 2023-1-WEEK3 Priority Queue, Map, Set (0) | 2023.09.01 |
[ALGOS STUDY] 2023-1-WEEK2 Stack, Queue, List (0) | 2023.09.01 |