티스토리 뷰

728x90

문제 링크

www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

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

www.acmicpc.net

 

풀이

1) 각 수의 개수를 세줍니다.

2) 수 $i$마다, ($i$의 개수) * ($x - i$의 개수)를 정답에 더해줍니다.

3) 경우의 수가 두 번씩 중복되었으므로 정답을 2로 나눠준 뒤 출력합시다.

 

 

정답 코드

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

ll n, x;
map<int, int> p;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for (int i = 0; i < n; i++) {
        int c;
        cin >> c;
        p[c]++;
    }
    cin >> x;
    int ans = 0;
    for (auto now: p) {
        auto[i, cnt] = now;
        if (p[x - i]) {
            ans += cnt * p[x - i];
        }
    }
    cout << ans / 2;
}
728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 10830 - 행렬 제곱  (0) 2021.04.08
[BOJ] 백준 2824 - 최대공약수  (0) 2021.04.07
[BOJ] 백준 11693 - n^m의 약수의 합  (0) 2021.04.07
[BOJ] 백준 1629 - 곱셈  (0) 2021.04.07
[BOJ] 백준 8111 - 0과 1  (0) 2021.04.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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 31
글 보관함