-
2024 - 02 - 07 C++ 코딩테스트 10주완성 D+2Language Grammar/C++ 2024. 2. 7. 13:54
* 재귀함수를 이용한 순열
실습코드void makePermutation(int n, int r, int depth) { cout << n << " : " << r << " : " << depth << '\n'; if (r == depth) { printV(v); return; } for (int i = depth; i < n; i++) { swap(v[i], v[depth]); makePermutation(n, r, depth + 1); swap(v[i], v[depth]); } return; } // 재귀함수로 만드는 순열 int main() { makePermutation(3, 3, 0); }
* 재귀함수를 이용한 조합
실습코드int cn = 5, k = 3; void print(vector<int> b) { for (int i : b) cout << i << ""; cout << '\n'; } void combi(int start, vector<int> b) { if (b.size() == k) { print(b); return; } for (int i = start + 1; i < cn; i++) { b.push_back(i); combi(i, b); b.pop_back(); } return; } int main() { // 재귀함수로 만드는 조합 vector<int> b; combi(-1, b); }
* 반복문을 이용한 조합int main() { for (int i = 0; i < cn; i++) { for (int j = 0; j < i; j++) { for (int k = 0; k < j; k++) { cout << i << " :" << j << " : " << k << "\n"; } } } }
* 순열과 조합은 실습을 진행한후 개념적인 부분은 추후 도화식으로 표현할 예정
* Split()
문자열을 특정 문자열을 기준으로 쪼개서 배열화시키는 함수
C++ 에서는 표준 라이브러리에서 Split 함수를 지원하지 않기 때문에 수동으로 구현하여야함.
실습코드// Split 함수 구현 vector<string> Split(string input, string delimiter) { vector<string> ret; long long pos = 0; string token = ""; // input.find(delimiter) 에서 유저가 입력한 delimiter 가 문자열에 있는지 확인한다. while ((pos = input.find(delimiter)) != string::npos) { //입력받은 문자열 위치까지 substr 함수를 이용하여 문자열의 처음부터 pos까지만 저장 token = input.substr(0, pos); //ret 배열에 token을 집어넣는다. ret.push_back(token); //기존 문자열은 입력받은 문자열 위치까지 지워준다. input.erase(0, pos + delimiter.length()); } ret.push_back(input); return ret; } int main() { //Split 함수 string s = "안녕하세요 혁준이는 킹갓제너럴엠퍼럴 천재이고싶습니다 정말이예요", d= "하"; vector<string> Stringa = Split(s, d); for (string b : Stringa) { cout << b << "\n"; } }
'Language Grammar > C++' 카테고리의 다른 글
2024 - 02 - 12 C++ 코딩테스트 10주완성 D+4 (1) 2024.02.12 2024 - 02 - 08 C++ 코딩테스트 10주완성 D+3 (1) 2024.02.08 2024 - 02 - 05 C++ 코딩테스트 10주완성 D+1 (1) 2024.02.05 2024 - 01 - 30 C++ Grammar D+6 (1) 2024.01.30 2024 - 01 - 23 C++ Grammar D+5 (0) 2024.01.23