Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

9-rivkms #38

Merged
merged 3 commits into from
Apr 2, 2024
Merged

9-rivkms #38

merged 3 commits into from
Apr 2, 2024

Conversation

rivkms
Copy link
Collaborator

@rivkms rivkms commented Mar 21, 2024

πŸ”— 문제 링크

두 수의 ν•©

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

1H

✨ μˆ˜λ„ μ½”λ“œ

μ˜€λžœλ§Œμ— λŒμ•„μ˜€λŠ” 김에 μ‰¬μš΄ 문제둜 μ°Ύμ•„μ™”μŠ΅λ‹ˆλ‹€.

βœ”οΈ 접근법

문제λ₯Ό μš”μ•½ν•˜μžλ©΄ μˆ˜μ—΄μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ Xλ₯Ό ꡬ할 수 μžˆλŠ” 두 수의 합을 κ΅¬ν•˜λŠ” 것 μž…λ‹ˆλ‹€.
λͺ¨λ“  경우의 수λ₯Ό κ³ λ €ν•˜λŠ” 것은 μ‹œκ°„μ΄ λ„ˆλ¬΄ μ˜€λž˜κ±Έλ¦¬κΈ°μ— νŒ¨μŠ€ν•˜κ³  λ‹€λ₯Έ 방법을 μ°Ύμ•„λ΄μ•Όκ² λ„€μš”.
이 λ•Œ λ“  생각은 λ°”λ‘œ μ΄λ ‡μŠ΅λ‹ˆλ‹€.
‼️ 두 수의 합이 Xκ°€ 되기 μœ„ν•΄μ„œ ν•œ μˆ«μžκ°€ A라면 λ‹€λ₯Έ μˆ«μžλŠ” X-A이닀.
μ’€ 더 μ§κ΄€μ μœΌλ‘œ μ„€λͺ…을 ν•΄λ³΄μžλ©΄, X/2보닀 큰 숫자 ν•˜λ‚˜, μž‘μ€ 숫자 ν•˜λ‚˜μ˜ ν•©μ—μ„œλ§Œ Xκ°€ λ‚˜μ˜¬ 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

♦️ κ°„λ‹¨ν•œ μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μžλ©΄,
1 2 3 4 5 μ—μ„œ 6을 λ§Œλ“€ 수 μžˆλŠ” 두 수의 합은 (1,5), (2,4) μž…λ‹ˆλ‹€. 이 λ•Œ 6/2 = 3을 κΈ°μ€€μœΌλ‘œ 큰 수 ν•˜λ‚˜, μž‘μ€ 수 ν•˜λ‚˜μ˜ ν•©μœΌλ‘œ λ§Œλ“€ 수 μžˆμ—ˆλ„€μš”.

κ·Έλ ‡λ‹€λ©΄ 이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ μš°λ¦¬λŠ” μ •λ ¬λœ μˆ˜μ—΄μ΄ ν•„μš”ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈμ£Όμ–΄μ§„ μ˜ˆμ‹œ

주어진 μ˜ˆμ‹œλ₯Ό 보면 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
μ•„λž˜μ™€ 같은 μˆ˜μ—΄μ΄ λ¬Έμ œμ—μ„œ μ£Όμ–΄μ Έμžˆμ—ˆκ³ 

이λ₯Ό μ •λ ¬ν•˜κ²Œ 되면 λ‹€μŒκ³Ό 같이 μˆ˜μ—΄μ΄ λ°”λ€Œκ²Œ λ©λ‹ˆλ‹€.

이 λ•Œ μš°λ¦¬λŠ” 13/2 = 7.5λ₯Ό κΈ°μ€€μœΌλ‘œ 큰 수 ν•˜λ‚˜, μž‘μ€ 수 ν•˜λ‚˜μ˜ ν•©μœΌλ‘œ 13을 λ§Œλ“€ 수 μžˆλ‹€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•˜μ—¬, μ •λ ¬λœ μˆ˜μ—΄μ˜ μ–‘ λμ—μ„œ 포인터듀을 움직이며, ν•΄λ‹Ή 포인터듀이 κ°€λ¦¬ν‚€λŠ” 숫자의 합이 Xκ°€ λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ œκ°€ μƒκ°ν•œ μ½”λ“œμž…λ‹ˆλ‹€.

πŸ“ SUDO CODE

1️⃣ μž…λ ₯을 λ°›μ•„μ˜¨λ‹€
2️⃣ μˆ˜μ—΄μ„ μ •λ ¬ν•œλ‹€. 
3️⃣ μˆ˜μ—΄μ˜ μ–‘ 끝에 포인터λ₯Ό 두고, μ•„λž˜μ˜ 쑰건에 맞게 움직이며 λ°˜λ³΅λ¬Έμ„ μˆ˜ν–‰ν•œλ‹€. 
    3️⃣-1 μ•žμͺ½μ—μ„œ μ‹œμž‘ν•œ 포인터가, λ’€μͺ½μ—μ„œ μ‹œμž‘ν•œ 포인터보닀 뒀에 있게 λœλ‹€λ©΄ λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•œλ‹€. 
    3️⃣-2 λ§Œμ•½ 숫자의 합이 λͺ©ν‘œκ°’보닀 크닀면 λ’€μͺ½μ˜ 포인터λ₯Ό ν•œμΉΈ μ•žμœΌλ‘œ λ‹ΉκΈ΄λ‹€. 
    3️⃣-3 λ§Œμ•½ 숫자의 합이 λͺ©ν‘œκ°’보닀 μž‘λ‹€λ©΄ μ•žμͺ½μ˜ 포인터λ₯Ό ν•œμΉΈ λ’€λ‘œ λ―Όλ‹€. 
    3️⃣-4 λ§Œμ•½ 숫자의 합이 λͺ©ν‘œκ°’κ³Ό κ°™λ‹€λ©΄ cnt에 값을 1 μ¦κ°€μ‹œν‚€κ³ , 포인터λ₯Ό μ΄λ™μ‹œν‚¨λ‹€. 
4️⃣ cntλ₯Ό 좜λ ₯ν•œλ‹€. 

πŸ–₯️ μ½”λ“œ

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

using namespace std;
int main(){
    int n, goal;
    int a, b, cnt = 0;;
    cin >> n;
    a = 0;
    b = n-1;
    vector<int> vec(n,0);
    for(int i = 0; i<n; i++){
        cin >> vec[i];
    }
    sort(vec.begin(), vec.end());
    cin >> goal;
    while(true){
        if(b<=a){
            cout << cnt;
            break;
        }
        if(vec[a]+vec[b] == goal){
            cnt++;
            a+=1;
            b-=1;
        }
        else if(vec[a]+vec[b] > goal){
            b-=1;
        }
        else{
            a+=1;
        }
    }
    return 0;
}

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

βœ”οΈ νˆ¬ν¬μΈν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 풀이할 수 μžˆλŠ” κ°„λ‹¨ν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

Copy link
Collaborator

@mong3125 mong3125 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 λ΄€μŠ΅λ‹ˆλ‹€. 투 포인터 λ¬Έμ œλŠ” μ˜€λžœλ§Œμ΄λ„€μš”.

  • Whileλ¬Έ 쑰건뢀에 λ°”λ‘œ 밑에 μžˆλŠ” 반볡문 νƒˆμΆœμ„ μœ„ν•œ if 문을 ν¬ν•¨μ‹œν‚¬ 수 μžˆμ„κ²ƒ κ°™μŠ΅λ‹ˆλ‹€. 좜λ ₯문은 λ°–μœΌλ‘œ λ”°λ‘œ λΉΌλ‚΄κ³ μš”.

Copy link
Collaborator

@YIM2UL2ET YIM2UL2ET left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

투 포인터λ₯Ό μ•žλ’€μ—μ„œ μ‚¬μš©ν•˜λŠ” 방법은 처음 λ³΄λ„€μš”. 재밌게 잘 λ΄€μŠ΅λ‹ˆλ‹€. μˆ˜κ³ ν•˜μ…¨μŠ΅λ‹ˆλ‹€.

@rivkms rivkms merged commit 76a188d into main Apr 2, 2024
@rivkms rivkms deleted the 9-rivkms branch April 2, 2024 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants