ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BaekJoon] 2295번 μ„Έ 수의 ν•©
    SW Test/BaekJoon 2021. 8. 22. 21:41
    λ°˜μ‘ν˜•
    • 이 글은 C++둜 풀이λ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    문제

     

    μ˜ˆμ‹œ

     

    풀이

    • 이 문제λ₯Ό 3쀑 for문을 μ‚¬μš©ν•˜λ©΄ 합을 κ΅¬ν•˜κ³  합이 μ‘΄μž¬ν•˜λŠ”μ§€ νŒλ‹¨ν•˜μ—¬ μ‹œκ°„λ³΅μž‘λ„κ°€ O(N4)이기 λ•Œλ¬Έμ— μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.
    • λ§ˆμ§€λ§‰ 합이 μ‘΄μž¬ν•˜λŠ”μ§€λ₯Ό 이뢄탐색을 μ‚¬μš©ν•˜λ”λΌλ„ μ‹œκ°„λ³΅μž‘λ„κ°€ O(N3logN)μ΄λΌμ„œ μ‹œκ°„μ΄ˆκ³Όκ°€ λΆˆκ°€ν”Όν•©λ‹ˆλ‹€.
    • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이뢄탐색을 μ‚¬μš©ν•˜λ˜, μƒˆλ‘œμš΄ 기법을 ν™œμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 즉 2개의 숫자의 합을 ν•˜λ‚˜μ˜ 배열을 λ§Œλ“­λ‹ˆλ‹€. 이 λ•Œμ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(N2)μž…λ‹ˆλ‹€. 이후 처음 λ°°μ—΄μ˜ 두 개의 차이가 2개의 숫자의 ν•© 배열에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜λ©΄ λ©λ‹ˆλ‹€. O(N2logN)으둜 ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • ex) a1+a2+a3 = a4 ->, a4 - a3 = a1+a2
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    int main(){
        int num;
        cin>>num;;
    
        int arr[1005];
        vector<int> two;
        for(int i=0;i<num;i++){
            cin>>arr[i];
        }
        sort(arr, arr+num);
    
        for(int i=0;i<num;i++){
            for(int j=i;j<num;j++){
                two.push_back(arr[i] + arr[j]);
            }
        }
    
        sort(two.begin(), two.end());
    
        int result = 0;
        for(int i=0;i<num;i++){
            for(int j=i+1;j<num;j++){
                if(binary_search(two.begin(), two.end(), arr[j]-arr[i])){
                    result = max(result, arr[j]);
                }
            }
        }
    
        cout<<result;
    }
    λ°˜μ‘ν˜•

    'SW Test > BaekJoon' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [BaekJoon] 1654번 λžœμ„  자λ₯΄κΈ°  (0) 2021.08.22
    [BaekJoon] 18870번 μ’Œν‘œμ••μΆ•  (0) 2021.08.22
    [BaekJoon] 2230번 수고λ₯΄κΈ°  (0) 2021.08.22
    [BaekJoon] 1806번 λΆ€λΆ„ν•©  (0) 2021.08.22
    [BeakJoon] 5430번: AC  (0) 2021.07.22
Designed by Tistory.