알고리즘/알고리즘(C,C++)

[C, C++기본] 기본 문법

산을좋아한라쯔 2016. 4. 14. 13:24
반응형

C++관련해서, 알고리즘 문제풀이를 위해 꼭 필요한 부분만을 살펴보자.


include

다음과 같은 헤더들을 포함시키는 것을 외워둬야 한다.

<stdio.h> //printf, scanf, freopen 함수를 사용하려면, 이 헤더파일을 include해야 함

<iostream> //cin, cout

<vector>    //vector 클래스

<algorithm> //min, max 함수

<string.h> //strlen 함수

<limits.h> //INT_MAX 상수


위 5개의 헤더는, 그냥 습관적으로 include해두는게 속편하다.

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <algorithm>

#include <vector>

#include <limits.h>


using namespace std;

cin, cout 등 표준 객체 및 라이브러리를 사용하기 위해서는, std로 namespace를 선언해야 한다.

알고리즘 문제풀이에서는, 이 것도, 그냥 필수로 지정해주면 된다.

using namespace std;


main 함수

알고리즘 문제풀이에서  main함수의 선언은, int형을 리턴하고, 파라미터는 아무것도 받지 않는 것으로 한다.

int main(void){


return 0;

}


입력과 출력

문제의 입력과 결과의 출력은, C언어 기본 함수인 scanf(), printf()를 이용해도 되고, C++ 객체인 cin, cout을 이용해도 된다. 단, 입력 수가 많거나 출력 수가 많다면, scanf나 printf를 사용하도록 한다.(속도 때문에)


그리고, 콘솔 입력이 아닌 파일로 입력을 받는 경우는 freopen 함수를 이용한다.


예를 들어, 아래와 같은 입력을 받는 경우를 보면,

2

3

1 2 3

4

1 2 3 4


#include <stdio.h>

#include <vector>

#include <algorithm>

#include <limits.h>

#include <iostream>

 

using namespace std;

 

int main(void){

         freopen("input.txt", "r", stdin);

         setbuf(stdout, NULL); //출력하는데 있어 buffering 하지 않겠다는 .

 

         int C, N;

         cin >> C; //scanf("%d",&C); 처럼해도 되나, cin 쓰는 것이 간단

        

         for (int test = 1; test <= C; ++test){

                  cin >> N;

                  vector<int> arr = vector<int>(N);

                  for (int i = 0; i < N; ++i){

                           scanf("%d", arr[i]);

                  }

         }

         return 0;

}


소숫점있는 숫자 입력: %f

문자열 입력: %s 


문자열 입출력 주의사항

cin, cout을 사용하면 편리하나, 속도가 느림. 이를 피하기 위해 입력으로는 scanf 혹은 fgets를 사용하고, 출력으로 printf를 사용하는데, 주의할 사항 있음.


scanf이용할 때: CarriageReturn 포함하지 않고 읽어들임. (fgets는 CR 포함)

         for (int test = 1; test <= C; ++test){

                  cin >> N;

                 

                  vector<string> words = vector<string>(N);

                  char ch[11];

                  for (int i = 0; i < N; ++i){

                           getchar();                        

                           scanf("%s", ch);

                           words[i] = ch;

                  }

 

                  string str = solve(words);

                  printf("%s\n", str.c_str());

         }



벡터

int형 변수를 담는 벡터 :  vector<int> arr;

char형 변수를 담는 벡터: vector<char> arr;


vector의 초기화: arr = vector<int>(100); //100개 int

                   arr = vector<int>(100,0); //100개 int. 0으로 초기값 지정


이중배열같은 벡터: vector<vector<int>> arr;

초기화 : arr = vector<vector<int>>(100); //100개의 vector<int>를 가지는 vector

         arr = vector<vector<int>>(100,vector<int>(10)); //10개씩 int를 가지는 vector 100개를 가진 vector

         arr = vector<vector<int>>(100,vector<int>(10,0)); //10개씩의 int 초기값이 0


vector에 값을 집어 넣을 때:

  - 이미 인스턴스가 만들어 졌다면(위의 초기화 과정을 통해), 배열처럼 첨자 이용해서 값입력 가능

    arr[0] = 1;

  - 인스턴스가 만들어지지 않았다면( vector<int> arr; ),    push_back()함수 이용해서 입력

    arr.push_back(1);


vector의 함수들

- push_back(val) : vector의 맨 마지막 위치에 val 삽입  

- pop_back() : 맨 마지막 값을 pop

- size() : 들어있는 원소의 갯수

   for(int i=0;i<arr.size();++i)

- empty(): 비어있는 지 여부

- front(), back(): 맨 처음/마지막 원소에 해당하는 주소 리턴

  int& val = arr.front();

- clear() : 벡터내 모든 원소를 없애서 size가 0이 되게 함



-끝-


반응형