티스토리 뷰

Algorithm

[백준 2831] 댄스 파티

devbelly 2021. 9. 18. 14:18

문제

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

 

알고리즘

sorting

 

풀이

자신이 선호하는 조건에 따라 매칭할 수 있는 최대 남녀쌍을 묻는 문제입니다.

 

만일 키가 양수라면 이성의 키의 값이 음수인 사람과 매칭해야하고 반대로 키가 음수라면 이성의 키가 양수인 사람을 매칭해야합니다. 두 경우 모두 동일하므로 남성의 키가 양수, 여성의 키가 음수인 경우만 보겠습니다.

 

남성의 키가 양수인 배열과 여성의 키가 음수인 배열을 정렬을 합니다. 배열의 앞에서부터 매칭을 시작합니다. 만일 조건이 만족한다면 다음 남녀쌍이 조건을 만족하는지 검사하면 됩니다. 단 조건을 만족하지 않는다면, 현재 매칭되지 않은 남성은 그대로 두고 여성은 다음 여성과 매칭되는지 확인해야합니다. 조건을 만족하지 않는다는 것은 여성의 키가 더 작고 남성의 키가 더 큰 상황인데 키가 정렬된 상태이므로 다음 남성과 현재 여성을 매칭하면 매칭될 수 가 없기 때문입니다.

 

코드

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 1; i <= n; ++i)
using namespace std;

int N, ans;
vector<int> mh, ml, wh, wl;

int main() {
#ifndef ONLINE_JUDGE
    freopen("in", "r", stdin);
    freopen("out", "w", stdout);
#endif
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);

    cin >> N;
    rep(i, N) {
        int x;
        cin >> x;
        if (x > 0) mh.emplace_back(x);
        else
            ml.emplace_back(-x);
    }
    rep(i, N) {
        int x;
        cin >> x;
        if (x > 0) wh.emplace_back(x);
        else
            wl.emplace_back(-x);
    }
    sort(mh.begin(), mh.end());
    sort(ml.begin(), ml.end());
    sort(wh.begin(), wh.end());
    sort(wl.begin(), wl.end());

    int pa = 0;
    int pb = 0;
    while (pa < mh.size() && pb < wl.size()) {
        if (mh[pa] < wl[pb]) {
            ans += 1;
            pa++;
            pb++;
        } else
            ++pb;
    }

    pa = 0;
    pb = 0;
    while (pa < ml.size() && pb < wh.size()) {
        if (ml[pa] > wh[pb]) {
            ans += 1;
            pa++;
            pb++;
        } else
            ++pa;
    }
    cout << ans;
    return 0;
}

'Algorithm' 카테고리의 다른 글

[백준 3078] 좋은 친구  (0) 2021.09.30
[백준 2832] 정렬  (0) 2021.09.20
[백준 23034] 조별과제 멈춰!  (0) 2021.09.15
[백준 5899] Overplanting  (0) 2021.09.14
[백준 5867] Scrambled Letters  (0) 2021.09.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함