티스토리 뷰

반응형

https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 자료 구조
  • 정렬
  • 두 포인터

 


 

⊙ 문제 접근 과정

 

투 포인터 문제다. start index 변수와 end index 변수를 만들어주고 index 값을 올리고 줄이면서 result 값을 찾아주면 된다.

 

  1. n값 입력받고
  2. vector에 n의 개수만큼 값 넣기
  3. 찾아야 할 x값 입력받기
  4. vector arr 오름차순 정렬
  5. 투 포인터 알고리즘
  6. count 값 출력

 

⊙ 문제 풀이

 

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

using namespace std;

int n,x;

int main() {
    cin >> n;
    vector<int> arr;

    for(int i=0;i<n;i++) {
        int x;
        cin >> x;
        arr.push_back(x);
    }

    cin >> x;
    

    int start=0, end= n-1;
    int count =0;

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

    while(start<end) {
        if(arr[start]+arr[end]==x) {
            count++;
            end--;
        } else if(arr[start] + arr[end]>x) {
            end--;
        } else {
            start++;
        }
    }

    cout << count;
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함