Post

leetcode(리트코드)3월24일 challenge870-Advantage Shuffle

leetcode March 24일 - Advantage Shuffle 문제입니다.

1. 문제

https://leetcode.com/problems/advantage-shuffle/


2. Input , Output


3. 분류 및 난이도

Medium 난이도입니다.
3월 24일자 챌린지 문제입니다.


4. 문제 해석

  • A[i] > B[i]로 만들 수 있게 A의 값들을 바꿔야합니다. A[i] > B[i] 인 갯수가 최대가 되도록 바꿔야합니다.

5. code

c++

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
bool pred(pair<int,int>& a,pair<int,int>& b)
{
    if(a.first==b.first)
        return a.second<b.second;
    return a.first<b.first;
}
class Solution {
public:
    vector<int> advantageCount(vector<int>& A, vector<int>& B) {
        //tempB는 B의 값과 인덱스를 저장합니다. 정렬을 해줄 것이므로.
        vector<pair<int,int>> tempB;
        //배열의 끝을 돌 때까지 정렬하지 못한 것은 queue에 넣습니다.
        queue<int> q;
        //결과 벡터입니다.
        vector<int> result(A.size());
        for(size_t i =0;i<B.size();++i)
            tempB.push_back(make_pair(B[i],i));
        //B의 인덱스와 값을 넣은 tempB를 정렬합니다.
        sort(tempB.begin(),tempB.end(),pred);
        sort(A.begin(),A.end());

        //j는 tempB를 도는 인덱스 값입니다.
        int j = 0;
        for(size_t i = 0;i<A.size();++i)
        {
            int value = tempB[j].first;
            int index = tempB[j].second;
            //만약 A[i]가 조건에 맞지 않으면 큐에 넣습니다.
            if(A[i]<=value)
            {
                q.push(A[i]);
                continue;
            }
            //조건에 맞으므로 result벡터에 값을 넣어줍니다.
            result[index] = A[i];
            ++j;
        }
        //q가 빌 때까지 접근하지 않은 인덱스에 값들을 넣어줍니다.
        while(!q.empty())
        {
            for(size_t i =0;i<result.size();++i)
            {
                if(result[i]==0)
                {
                    result[i] =q.front();
                    q.pop();
                }
            }
        }
        
        return result;
    }
};

6. 결과 및 후기, 개선점

c++ 92%

This post is licensed under CC BY 4.0 by the author.