이제 취준할때가 오면서 코딩테스트를 슬슬 준비하고있다. 3학년때 전과를해서 수업을 닥치는대로 듣고 동아리를 마구마구 들어갔더니 코테준비가 확연히 딸린다...코딩테스트는 일반적인 자료구조나 알고리즘 수업 과제와 어떻게 다른지 모르겠어서 인터넷 서치한 결과를 간결히 정리해놓고 머리에 새기면서 준비하려고한다.
일단 가슴에 새겨야하는 말은
객체 지향적인 코드
자료구조 직접 구현하는것
다 쓸모없다는 것이다!! 코딩테스트 속 코드는 간결함과 정확함이 생명이다.
그러므로 STL 라이브러리를 잘 알고있어야 자료구조 직접 구현하는 헛짓안하고 있는거 갖다쓴다.
C++에서 가장 번거로운것이 문자열처리이다. 그러므로 이에 사용하면 좋을 코드들을 가져왔다.
string s;
getline(cin, s);
숫자형 문자 ("0"~"9")를 int로 바꾸고싶을땐 '0'을 빼기
str.find(str2)를 했을때 못찾는경우 string::npos를 반환하지만 -1을 반환한다고 생각해도됨
str.find(str2, index)로 하면 index부터 탐색
str.erase(index, size) 삭제시작할 index, 그리고 크기
#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;
}
#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;
혹여나 cin으로 하나하나 값을 입력받거나 하는경우 초기화가 필요할수도있음
그때는
vector<int> v(n); //0으로 n개 생성
vector<int> v(n, x); //x로 n개 원소 생성
v.resize(n) //기본값 0으로 백터 사이즈 더 키울수있음
v.erase(v.begin() + index) //이거로 index위치에 있는 데이터 삭제 가능
v.erase(v.begin() + s, v.begin() + e) //s 부터 e-1까지의 인덱스 삭제
char cst[100];
string str = "hello";
strlen(cstr, str.c_str());
char cst[100];
char *cst = "hello";
string str = cst;
//int의 경우 '0'빼기
string str = "100";
int num;
num = atoi(str.c_str());
int num = 10;
string str;
str = to_string(num);
선생님 감사합니다