알고리즘/BOJ

[c/c++] BOJ 3273번 -두 수의 합

wonjun.Aden 2022. 2. 20. 18:06

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

문제

문제 풀이

#include <bits/stdc++.h>
using namespace std;


//두 수의 합
//n개의 서로 다른 양의 정수 a1,a2,a3---an으로 이루어진 수열이 있음.
//ai의 값은 1보다 크거나 같고, 1,000,000보다 작거나 같은 자연수.
//자연수 ai + aj = X을 만족하는 (ai,aj) 쌍의 수를 구하시오.
int main(){
    ios::sync_with_stdio(0);
	cin.tie(0);

    //수열의 크기
    int n;
    cin >> n;
    //수열에 포함되는 수
    int array[1000001];
    int resultArr[2000001];
    for(int i=0;i<n;i++){
        cin >> array[i];
    }
    
    //X의 값
    int x;
    cin >> x;

    int count=0;
    
    //시간 복잡도 O(N)을 가지고 있음.
    for(int i=0;i<n;i++){
        //x-array[i]가 양수여야 함.
        if((x-array[i]) > 0){
            if(resultArr[x-array[i]] == 1){
                count++;
            }else{
                resultArr[array[i]]=1;
            }
        }
    }

    cout << count;

}

문제의 포인트.

배열과 관련된 문제.

조건

  • 1 <= N <=100000 의 범위이고 1<= X < =2000000의 범위 입니다.
  • x-array[i]의 값이 0보다 크고 resultArr[x-array[i]]의 값이 1이면 count를 1 증가 시킵니다. 
  • x-array[i]의 값이 0보다 크지만 resultArr[x-array[i]]의 값이 1이 아니면 값을 1로 세팅해 주고 다음으로 넘어갑니다. 
반응형