[코테준비] c++ 코테에서 알아야하는것들

마코레·2021년 12월 11일
9

코테공부

목록 보기
1/19

코딩테스트는 어떻게 하는걸까?

이제 취준할때가 오면서 코딩테스트를 슬슬 준비하고있다. 3학년때 전과를해서 수업을 닥치는대로 듣고 동아리를 마구마구 들어갔더니 코테준비가 확연히 딸린다...코딩테스트는 일반적인 자료구조나 알고리즘 수업 과제와 어떻게 다른지 모르겠어서 인터넷 서치한 결과를 간결히 정리해놓고 머리에 새기면서 준비하려고한다.

일단 가슴에 새겨야하는 말은

객체 지향적인 코드
자료구조 직접 구현하는것

다 쓸모없다는 것이다!! 코딩테스트 속 코드는 간결함정확함이 생명이다.
그러므로 STL 라이브러리를 잘 알고있어야 자료구조 직접 구현하는 헛짓안하고 있는거 갖다쓴다.


1. 문자열처리

C++에서 가장 번거로운것이 문자열처리이다. 그러므로 이에 사용하면 좋을 코드들을 가져왔다.

몇가지 팁들

  1. getline은 앞뒤 개행문자들도 다 읽어옴.
string s;
getline(cin, s);
  1. 숫자형 문자 ("0"~"9")를 int로 바꾸고싶을땐 '0'을 빼기

  2. str.find(str2)를 했을때 못찾는경우 string::npos를 반환하지만 -1을 반환한다고 생각해도됨

  3. str.find(str2, index)로 하면 index부터 탐색

  4. str.erase(index, size) 삭제시작할 index, 그리고 크기

문자열 자르기

  1. string 클래스 사용할때
#include <string>
using namespace std;

int main() {
   string lines = "hello,my,name,is";
   size_t previous = 0, current;
   current = lines.find(','); //찾지못한경우 npos반환

   while(current !=string::npos) {
       string substring = lines.substr(previous, current - previous);
       cout << substring << " ";
       previous = current + 1;
       current = lines.find(',', previous);
   }
   cout << lines.substr(previous, current - previous);
   return 0;
}
  1. sstream 클래스 이용할때
    #include <sstream>

    string lines = "hello my name is";
    stringstream ss(lines);
    string tmp;
    while ((ss >> tmp)) {
        log.push_back(tmp);
        cout << tmp << "\n";
    }

or

    string lines = "2002:04:21";
    istringstream iss(lines);
    string token;
    while(getline(iss, token, ":")) {
        cout << token << "\n";
    }

대소문자 변환

string word = "HELLO";
transform(word.begin(), word.end(), word.begin(), ::tolower);
cout<<word<<"\n"; //hello

for(int i=0; i<word.size(); i++) {
    word[i] = ::toupper(word[i]);
}
cout<<word<<"\n"; //HELLO

특정 문자열 찾기

    using namespace std;
    string line = "hello my namloe is siyeon";
    string word = "lo";
    int pos = line.find(word);

    while(pos != string::npos) { //찾지못할때까지 반복
        cout<<line.substr(pos, word.size()) << "\n";
        pos = line.find(word, pos+word.size());
    }

알파벳 제외 특수문자 공백으로 바꾸기

    #include <algorithm>
    using namespace std;

    bool wordChange(char c) {
        return c == '\'' || !isalpha(c); 
        //파라미터 속 문자가 ' 이거나 alphabet이 아닌경우 return
    }

    int main() {
        string line = "h{el@@lo \tmy \"namelo<<e is siy{eo>>>n";
        replace_if(line.begin(), line.end(), wordChange, ' ');
        cout << line << "\n";
        return 0;

2. vector 사용법

vector 초기화

혹여나 cin으로 하나하나 값을 입력받거나 하는경우 초기화가 필요할수도있음
그때는

    vector<int> v(n); //0으로 n개 생성
    vector<int> v(n, x); //x로 n개 원소 생성

    v.resize(n) //기본값 0으로 백터 사이즈 더 키울수있음

vector 삭제

    v.erase(v.begin() + index) //이거로 index위치에 있는 데이터 삭제 가능
    v.erase(v.begin() + s, v.begin() + e) //s 부터 e-1까지의 인덱스 삭제

3. 변수형 변환

str → char

    char cst[100];
    string str = "hello";

    strlen(cstr, str.c_str());

char → str✨

    char cst[100];
    char *cst = "hello";

    string str = cst;

char → int✨

    //int의 경우 '0'빼기

str → int✨

    string str = "100";
    int num;

    num = atoi(str.c_str());

int → str

    int num = 10;
    string str;

    str = to_string(num);
profile
새싹 백엔드 개발자

1개의 댓글

comment-user-thumbnail
2022년 3월 7일

선생님 감사합니다

답글 달기