ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024 - 02 - 07 C++ 코딩테스트 10주완성 D+2
    Language 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";
            }
        }








Designed by Tistory.