suyeoniii
수바리의 코딩일기
suyeoniii
전체 방문자
오늘
어제
  • 분류 전체보기
    • 🪓 삽질일기
    • 🔙 Backend
      • 🟢 Node.js
      • 🐈‍⬛ NestJS
      • 🌿 Springboot
      • 🗄️ Database
    • 🌸 Frontend
      • 🌐 React.js
      • 💚 Vue.js
      • 🤖 Android
    • 🕹️ 알고리즘
      • 💯 코딩테스트
    • 🔠 프로그래밍 언어
      • 💛 Javascript
      • 💙 Typescript
    • 🚀 배포
    • 🐱 Git
    • etc.
      • 개발환경
      • 오픈 API
      • 개념정리
      • 커뮤니티
    • AI
      • 생성형 AI
    • 회고

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MySQL
  • vue
  • 백준
  • MAC
  • 회고
  • ubuntu
  • 알고리즘
  • html
  • android
  • C++
  • AWS
  • java
  • ec2
  • nodejs
  • Spring Boot
  • Git
  • springboot
  • node.js
  • javascript
  • node

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
suyeoniii

수바리의 코딩일기

[C++] 코딩테스트를 위한 C++ 기본
🕹️ 알고리즘/💯 코딩테스트

[C++] 코딩테스트를 위한 C++ 기본

2020. 9. 16. 14:07
반응형

안녕하세요:)

 

코테 문제 풀 때 주로 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
    '🕹️ 알고리즘/💯 코딩테스트' 카테고리의 다른 글
    • [프로그래머스-level1][1차]다트게임
    • [백준-16693]Pizza Deal(C++)
    • [백준-9020]골드바흐의 추측(C++)
    • [백준-1978]소수 찾기(C++)
    suyeoniii
    suyeoniii
    개발관련 문제 해결, 공부한 내용 등을 업로드합니다.

    티스토리툴바