본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 3273번 : 두 수의 합 답

반응형

www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

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

www.acmicpc.net

map을 이용해 푼 문제였습니다.

 

풀이방법

 1. map에 key는 a의 원소, value는 존재여부(0은 없음,1은 있음)으로 해 저장합니다.

 2. (x - map.first, map.first) 가 모두 1이라면 한 쌍이 만들어지므로 답 변수 ans++해줍니다.

 3. 중복해서 더해졌으므로 ans/2를 출력합니다.

 

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n, ans, x;
map<ll,ll> m;
int main(){
    cin >> n;
    while(n--){
        ll x;
        cin >> x;
        m[x] = 1;
    }
    cin >> x;
    for(auto &el : m) 
        if(m[x - el.first] && m[el.first]) ans++;
    cout << ans/2 << '\n';
}