1. binary_search

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector < int > v = {1, 5, 2};
    sort(v.begin(), v.end());    //벡터 정렬 무조건 해야함 !!
    
    for (int i = 1; i <= 5; i++) {
        if (binary_search(v.begin(), v.end(), i))
            cout << i << "는 벡터에 존재" << "\n";
        else
            cout << i << "를 찾을 수 없음" << "\n";
    }
 
    return 0;
}

1-1. lower_bound

범위 내에서 value보다 크거나 같은 것(작지 않은) 중 첫번째 요소를 가리키는 iterator 반환, -v.begin()하면 idx 반환


1-2. upper_bound

범위 내에서 value보다 큰 첫번째 요소를 가리키는 iterator 반환, -v.begin()하면 idx 반환

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int x = 2;
vector<int> v = {1, 1, 2, 2, 2, 2, 3};

int solution(int x) {
    int low = lower_bound(v.begin(), v.end(), x) - v.begin(); //iter 반환 - 주소 = 해당 idx
    int upper = upper_bound(v.begin(), v.end(), x) - v.begin();
    cout << low <<", "<<upper << endl;
    return upper - low;
}

int main() {
    vector<int>::iterator it;
    it = lower_bound(v.begin(), v.end(), x);
    cout << *it << endl; //원소 반환
    it = upper_bound(v.begin(), v.end(), x);
    cout << *it << endl; //원소 반환

    int result = solution(x); //2와 같은 것 몇개인지 구하기
    cout << result << endl;

    return 0;
}

 

2. getline : 띄어쓰기 부분까지 문자열을 저장

#include <iostream>
#include <string>
using namespace std;

int main() { //입력 받은거 그대로 출력
    string s;

    while (getline(cin, s)) {
        cout << s << "\n";
    }

    return 0;
}

 

3. stringstream : 공백으로 문자열 자를 때 사용(문자열로부터 입력받는 것)

#include <iostream>
#include <vector>
#include <sstream> //해줘야함
using namespace std;

int main() {
    string s = "abc def ghi jkl mn opqr stu vw xyz";
    vector<string> v;
    stringstream ss(s);
    string s1;

    while (ss >> s1) {
        v.push_back(s1);
    }
    for (auto &i: v)
        cout << i << endl;
}

 

4. 올림/내림/반올림

#include <cmath>

1) 올림

result = ceil(4.2) 

=> result = 5.0

 

2)내림

result = floor(4.2)

=> result = 4.0

 

3) 반올림

round()

 

5. char to string

char i = 'c';
string tmp_string(1, i); // "c" 문자열

 

6. string 비교

==

 

7. find

#include <iostream>
#include <vector>
using namespace std;

int main() {
    string data = "딸기";
    vector<string> name_list = {"딸기", "바나나", "사과"};

    if (find(name_list.begin(), name_list.end(), data) == name_list.end())
        cout << "없음";
    else
        cout << "있음";
}

 

8. 문자열 자르기

문자열.substr(시작 위치, 길이)

 

9. next_permutation <algorithm>

1) 순열

vector<int> v = {1, 2, 3};
sort(v.begin(), v.end()); // 오름차순

1-1. 배열 사이즈자리 만큼의 순열

do {
    for (auto &it : v)
        cout << it << " ";
    cout << "\n";
} while(next_permutation(v.begin(), v.end()));

1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 

 

1-2. m자리 수의 순열 (+m부터 reverse 후 next_permutation) - N개 중 M(2)개 뽑아 순열

do {
    for (int i = 0; i < 2; i++) {
        cout << v[i] << " ";
    }
    cout << "\n";
    reverse(v.begin() + 2, v.end()); // 중복제거
} while (next_permutation(v.begin(), v.end()));

1 2 
1 3 
2 1 
2 3 
3 1 
3 2

 

1-3. 모든자리수의 순열 (reverse 후 next_permutation)

int r = 0, size = v.size(); // 자릿수 cnt
while(r <= size) {
    do {
        for (int i = 0; i < r; i++)
            cout << v[i] << " ";
        cout << "\n";
        reverse(v.begin() + r, v.end()); // 중복제거
    } while(next_permutation(v.begin(), v.end()));
    r++;
}




1 2 
1 3 
2 1 
2 3 
3 1 
3 2 
1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1

 

2) 조합

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> n = {1, 2, 3};
    vector<int> ind = {1, 1, 0}; //3중 2개를 뽑기 위한 0과 1을 저장한 벡터

    sort(ind.begin(), ind.end());

    do {
        for (int i = 0; i < ind.size(); i++) {
            if (ind[i] == 1) {
                cout << n[i] << " ";
            }
        }
        cout << "\n";
    } while (next_permutation(ind.begin(), ind.end()));

    return 0;
}


2 3 
1 3 
1 2 

 

2-2. 모든자리수의 조합 (reverse 후 next_permutation)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    vector<int> arr = {1, 2, 3};

    int r = 1;

    while (r <= arr.size()) {
        vector<int> ind(arr.size());
        for (int i = 0; i < r; i++) {
            ind[i] = 1;
        }
        sort(ind.begin(), ind.end());
        do {
            for (int i = 0; i < ind.size(); i++) {
                if (ind[i] == 1) {
                    cout << arr[i] << " ";
                }
            }
            cout << "\n";
        } while (next_permutation(ind.begin(), ind.end()));
        r++;
    }
    return 0;
}




2 3 
1 3 
1 2 
1 2 3

 

3) 중복순열

#include <iostream>

using namespace std;
int N, M;
int arr[8]; //완성된 순열이 저장되고 갱신됨

void backTracking(int cnt){
    if(cnt == M){ // M개 다 골랐다면
        for(int i = 0; i < M; i++){
            cout << arr[i] << ' ';
        }
        cout << '\n';
        return;
    }
    
    for(int i = 1; i <= N; i++){ //배열을 만들어서 계속 값을 바꿈
        arr[cnt] = i;
        backTracking(cnt+1);
    }
}

int main(){
    cin >> N >> M;
    backTracking(0);
    
    return 0;
}

1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 
3 3 

 

4) 중복조합

#include <iostream>

using namespace std;
int N, M;
int arr[8];

void backTracking(int cnt, int num){
    if(cnt == M){
        //출력
        for(int i =0; i < M; i++){
            cout << arr[i] << " ";
        }
        cout << '\n';
        return;
    }

    for(int i = num; i <= N; i++){
        arr[cnt] = i;
        backTracking(cnt + 1, i); // num, i 차이
    }

}

int main(){
    cin >> N >> M;
    backTracking(0, 1);
    return 0;
}

1 1 
1 2 
1 3 
2 2 
2 3 
3 3 

'⚖️Algorithm' 카테고리의 다른 글

[Java] 코딩테스트 함수  (0) 2022.10.27
[코딩테스트] 알고리즘 정리  (0) 2022.10.22
[SQL] 코딩테스트 준비  (0) 2022.10.20
[Algorithm] 프로그래머스 - 여행경로 (C++)  (0) 2022.10.15
[java] 지식  (0) 2022.09.23

+ Recent posts