안녕하세요:)
코테 문제 풀 때 주로 C++사용하는데요
여러문제에서 아주유용하게 사용하면서, 자주사용한다 싶은 코드위주로 요약해서 설명드릴려고해요(사실 정리해두고 제가 쓰려고하는...)
1.using namespace std;
저는 처음에 책으로 c++배울때는 무조건 std를 일일이 붙여줘야하는 줄 알았습니다.
위 코드를 상단에 써놓으면 std를 일일이 안붙여주어도 cin,cout등을 그냥 사용가능합니다.
#include <iostream>
using namespace std;
int main() {
cout << "Hello World";
}
2.배열 동적할당
대부분의 경우 테스트케이스 수를 먼저 입력받은 뒤 테스트케이스 수만큼 값을 입력받죠
그럴 때 동적할당을 사용하면되는데 사실 귀찮아서 주로 벡터를 더 자주사용합니다!
하지만 벡터는 가끔 범위를 벗어난거아니냐며 에러메세지가 나오죠...
그럴 땐! 배열을 쓰는게 차라리 마음 편할때가 종종 있습니다.
#include <iostream>
using namespace std;
int main() {
//입력받은 값 만큼 배열크기 지정
int N;
cin >> N;
int* arr = new int[N];
delete[] arr; //메모리 해제
}
+2차원배열 동적할당
이것도 은근 많이 씁니다!
1차원 배열을 만든뒤 각 행에 배열을 추가하여 2차원 배열을 나타내도록 합니다.
#include <iostream>
using namespace std;
int main() {
//[r,c]크기의 2차원배열 생성
int r, c;
cin >> r >> c;
int** arr;
arr = new int* [r];
for (int i = 0; i < r; i++) {
arr[i] = new int[c];
}
//메모리 해제
for (int i = 0; i < r; i++)
delete[] arr[i];
delete[] arr;
}
3.벡터
아무리 벡터가 가끔 에러가 뜰 수 있다지만... 그래도 배열보다 벡터를 더 자주사용합니다
(벡터가최고야)
일단 사이즈를 미리 설정안해두어도 되고, 유용한 함수도 많고...아무튼 좋습니다.
벡터에 접근할때 범위에 벗어난 접근만 피해주시면 에러없이 잘 사용하실수 있어요! (특히 for문 조건에서!)
벡터와 관련된 함수는 아주 많은데,
기본적으로 자주 사용되는 것만 알고계시고 나머지는 필요할 때 찾아서 보는게 편해요.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N; //테스트케이스 N
vector<int> v; //벡터 정의
for (int i = 0; i < N; i++) { //벡터에 입력값 추가
int a;
cin>>a;
v.push_back(a);
}
for (int i = 0; i < v.size(); i++) { //벡터 값 출력
cout<<v[i];
}
}
#include <vector>를 해주셔야 사용가능합니다.
기본 사용법
vector<int> v; | int타입을 요소로 가지는 벡터 v선언 |
v.push_back(a) | 벡터 v의 맨뒤에 a추가 |
v.pop_back() | 벡터 v의 맨뒤 요소 삭제 |
v[i] | 벡터 v의 i번째 요소 참조 |
v[i] = a | 벡터 v의 i번째 요소를 a로 변경(에러 가능성 O) |
v.size() | 벡터 v의 크기 반환 (5개의 요소가 있으면 사이즈는 5) |
v.begin() | v의 첫번째 요소의 주소 |
v.end() | v의 마지막 요소의 주소 |
+ 2차원벡터
가끔 사용하지만 2차원을 쓰는경우는 값 수정이 많이 이루어지는데 아까 말햇던것처럼 범위 문제가 있기때문에 때에 따라서 2차원배열이 더 나을때도 있습니다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int r,c;
cin >> r >> c;
vector<vector<int>> v2; //2차원벡터 정의
vector<int> v;
for (int i = 0; i < r; i++) { //2차원벡터에 추가할 1차원벡터
v.push_back(0);
}
for (int i = 0; i < c; i++) { //2차원벡터에 벡터 추가
v2.push_back(v);
}
}
2차원 배열과 비슷하게, 1차원벡터를 만든 뒤 2차원벡터에 추가하면 됩니다.
v[i][j]로접근할 수 있습니다.
+벡터 pair
이차원벡터로 만들 수도 있지만,
여러 쌍의 값을 입력받은뒤에 sort시키면 앞에값과 두번째 값이 달라지잖아요
이때 pair로 설정한뒤 sorting하면 둘중 하나의 값에 따라 정렬가능합니다!
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
cin >> N;
vector<pair<int, int>> v; //pair vector 정의
for (int i = 0; i < N; i++) { //pair형식으로 요소 추가
v.push_back(make_pair(i,i));
}
for (int i = 0; i < N; i++) { //pair형식으로 요소 출력
cout << v[i].first << " " << v[i].second;
}
}
-pair<int,int>로 pair임을 정의
-make_pair(a,b)로 pair를 만들어서 추가
-v[i].first로 pair의 첫번째 요소, v[i].second로 두번째요소에 접근 가능
4.sort(정렬할 첫번째 주소, 정렬할 마지막 주소)
C++에 내장된 함수중에 제일 편하다고 생각되는 정렬시켜주는 함수입니다
#include <algorithm>을 통해 사용하실 수 있고
첫번째 주소~마지막 주소에 있는 요소들을 정렬해줍니다.
배열에서는 배열의 주소(배열이름, 배열이름+n)를 사용하면 됩니다.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int arr[6] = { 3,4,2,5,1 };
sort(arr, arr + 5);
for (int i = 0; i < 5; i++) {
cout << arr[i];
}
}
벡터에서는 벡터의 begin(), end() 를 사용하면 됩니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = { 2,3,4,5,1 };
sort(v.begin(), v.end());
for (int i = 0; i <v.size(); i++) {
cout << v[i];
}
}
제일 자주쓰는건 여기까지고 이 외에도 queue,deque 등등...가끔 사용하는데 , 제가 문제를 더 많이 풀어본다면 자주 사용하는 자료구조,함수도 더 늘어나겠죠..? 더 생겼을때 내용 추가할게요~
'🕹️ 알고리즘 > 💯 코딩테스트' 카테고리의 다른 글
[프로그래머스-level1][1차]다트게임 (0) | 2021.01.08 |
---|---|
[백준-16693]Pizza Deal(C++) (0) | 2020.11.27 |
[백준-9020]골드바흐의 추측(C++) (1) | 2020.08.24 |
[백준-1978]소수 찾기(C++) (3) | 2020.08.23 |
[백준-1011]Fly me to the centauri(C++) (0) | 2020.08.22 |