PS를 위한 간단한 C++

pengooseDev·2023년 6월 5일
1
post-thumbnail

Type

  • int : 정수. %d
  • char : ASCII로 바꿀 수 있는 하나의 글자(숫자랑 비슷) %c
  • long int : %ld
  • long long int : %lld
  • float : 소수(부동 소수점 오차 커서 double 쓰는게 나음)
  • double : 부동소수점 넉넉히 제공함. %lf
  • long double : 부동소수점 더더욱 넉넉히 제공. %LF
  • bool
  • unsigned int : +- 할당하는 비트까지 숫자로 쓰고 싶을 때.

입출력

한 글자씩 받기

char tmp;
scanf(" %1c", tmp);

문자열 포매팅

printf("숫자는 %d 문자는 %s", 10, "string")

연산자

JS랑 동일함.

and : &&
or : ||


형변환

int myInt = 3;
double myDouble = (double)myInt;


변수

returnType func() {
  printf("%d", true)
  return returnType
}

str

char str[SIZE]


Arr

TYPE NAME[SIZE] = {1, 2, 3, 4, ... }

int arr[100]


struct(구조체)

struct a
{
	int fieldX;
	int fieldY;
}

struct a
{
	int fieldX;
	int fieldY;
} name, name2[10]


a myObject;
a.filedX = 1;
a.filedY = 1;

조건문

int a = 2;

if (1 == 1)
{
}
else if (a == 2)
{
}
else
{
}

// 짧게 쓰고싶다면
if (a == 1)
	printf("catch");

반복문

for (int i = 0; i <= 10; i++)
{
	// code
}

int i = 0;

for (; i <= 10;)
{
	// code
    i++
}

for (;;)
{
	// code
    if (i <= 10)
    	break;
}

삼항연산자

int check = (a == 2) ? 100 : 200;

함수

char func (int a, int b)
{
	return '1';
}

고차원 배열

int arr[100]
int arr[100][100]
int arr[100][100][100]


STL(Standard Template Library)

vector

#include <vector>
#include <stdio.h>
using usespace std

vector<TYPE> NAME; // vector<TYPE> NAME(size, 초기값);

int main()
{
	v.push_back(1); // push
    v.emplace_back(2); // push_back보다 더 빠름.
    
    v.resize(5); // size를 5로 지정;
    v.resize(5, 0); // size를 5로 지정하고 0으로 초기화;
    
    for (int i = 0; i < v.size(); i++)
    {
    	printf()
    }
    
    
	for (int i : v) // for (let i of )
    {
    	printf("%d ", i);
    }
}

pair


#include <stdio.h>
#include <vector>
using namespace std;


int main()
{
  int N = 5;

  pair<int, int> a = make_pair(2, 3); // 정석;
  pair<int, int> b = {2, 3}; // 생성자;

  a.first = 2, a.second = 3;

  vector<pair<int, int>> v(100, {2, 3}); // 페어가 들어가는 벡터;

  // 값 추가
  v.push_back({2, 3});
  v.emplace_back(2, 3); // push_back이 조금 더 빠름.
  
  return 0;
}

1차원 백터에 다양한 값 사용하기.

// vector 안에 3개 이상의 값을 넣고 싶을 때

// 4가지 방법
// 1. vector
// 2. 구조체
// 3. pair<int, pair<int, int>> a;
// a.first, a.second.first, a.second.second;
// 4. tuple

tuple<int, int, int> tu = {1, 2, 3};


tuple

#include <tuple>

tuple<int, int, int> tu = {1, 2, 3};
// printf("%d", get<0>(tu));
auto [tu1, tu2, tu3] = tu; // pair 에서도 가능

auto

  #include <tuple>
  #include <vector>
 
  vector<tuple<int, int, int>> vtu(10, {1, 2, 3});
  for (auto [t1, t2, t3] : vtu)
  {
    printf("%d %d %d\n", t1, t2, t3);
  }

Stack

#include <stack>
using namespace std;

int main()
{
  // stack
  // 선언 : stack<TYPE> NAME;
  stack<int> s;
  // 값 넣기 : push, emplace
  s.push(1);
  s.emplace(3);
  // 비어있는지 확인하는 방법
  s.empty();
  // bool 타입으로 반환

  // 가장 위에 있는 값 확인하기 *주의 : stack이 비어있는데, 확인을 하면 에러가 납니다.
  s.top();
  printf("%d", s.top());

  // 가장 위에 있는 값 뽑기 * stack이 비어있는데, 뽑으면 에러가 난다.
  s.pop();

  // stack 크기 확인
  s.size(); // 반환 타입 unsigned int 0 ~ 21 * 2;
  
  
  // clear
  while (!s.empty()) s.pop();  
}

Sorting

#include <algorithm>

정렬 함수에선 true를 return하면 자리를 바꾸고 false를 return하면 자리르 바꾸지 아니한다.

배열 정렬

#include <algorithm>
int arr[100];
for (int i = 0; i < 100; i++)
{
	
}

sort(arr, arr + 100); // sort(시작 포인터 주소, 끝나는 포인터 주소);

// 특정 조건에 따라 정렬하고자 한다면, 비교함수를 만들어주면 됨
bool cmp (int v1, int v2)
{
	return v1 < v2; // 오름차순
    // return v1 > v2; 내림차순
}

sort(arr, arr + 100, cmp);

구조체 정렬

  
  struct user
  {
    int age;
    char name;
  };

  bool cmp(const user &v1, const user &v2)
  {
    if (v1.age < v1.age)
      return true;
    else if (v1.age == v2.age)
      return v1.name < v2.name;
    return false;
  }


  user users[100];

  for (int i = 0; i < 100; i++)
  {
    users[i].age = 1000 - i;
    users[i].name = i;
  }

  sort(users, users + 100, cmp);

  for (int i = 0; i < 100; i++)
  {
    printf("%d %c\n", users[i].age, users[i].name);
  }

벡터 정렬

벡터의 포인터 값은 연속적이지 않음.
따라서 begin과 end 메서드를 이용해 포인터 값에 접근한다.

vector<int> v;
for (int i = 100; i > 0; i--)
   v.emplace_back(i);

sort(v.begin(), v.end());

벡터

벡터 중복 제거

#include <stdio.h>
#include <algorithm>
#include <vector>


int main()
{
  int N;
  scanf("%d", &N);

  vector<int> v(N);
  for (int i = 0; i < N; i++)
  {
    scanf("%d", &v[i]);
  }

  vector<int> sorted_v = v;

  sort(sorted_v.begin(), sorted_v.end()); // 벡터 정렬

  // 벡터 중복 제거
  sorted_v.erase(unique(sorted_v.begin(), sorted_v.end()), sorted_v.end()); 

  // 벡터에 존재하는 값들 중에 indexOf처럼 가장 앞의 반복자를 return함.
  // lower_bound는 반복자를 return하기 때문에 다시 해당 백터의 begin을 이용해 값을 빼줘야 index가 나온다.
  for (int i = 0; i < N; i++)
  {
    printf("%d ", lower_bound(sorted_v.begin(), sorted_v.end(), v[i]) - sorted_v.begin());
  }

  return 0;
}

남은 것.

Queue : Queue, deque queue
Sort

0개의 댓글