프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 핵심은 정렬과 b < a이면 B 안에서 b보다 상대적으로 작은 숫자를 사용해야하는 것
  • 전자는 sort를 사용했고 후자는 정렬된 배열에서 A 기준으로 역방향으로 순회하며 b < a면 idxB의 값을 감소시키지 않는 것으로 해결
#include <string>
#include <vector>
#include <algorithm>

// 두 팀의 순서가 모두 고정된 것이 아니므로 순서는 무시
// 두 배열 모두 정렬한 뒤에 size - 1부터 비교하면 될 듯
// 이렇게하면 a보다 더 큰 숫자 중에 제일 작은 숫자를 뽑거나 할 필요는 없을듯
// b가 a보다 작으면 B 안에서 b보다 상대적으로 작은 숫자를 꺼내야함
// 두 개 배열을 두고 size - 1부터 --해가면서 A가 0에 도달하면 반복을 끝내면 될거 같음

using namespace std;

int solution(vector<int> A, vector<int> B) {
    int answer = 0;
    
    int idxA = A.size() - 1;
    int idxB = idxA;
    
    // 정렬
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    
    
    for(int i = idxA; idxA >= 0; i--) {
        int numA = A[idxA];
        int numB = B[idxB];
        
        // numB가 numA보다 크면
        if(numB > numA) {
            // answer++하고 B에서 다음으로 큰 숫자를 준비
            answer++;
            idxB--;
        }
        
        // A에서 다음으로 큰 숫자 준비
        idxA--;
    }
    
    return answer;
}

+ Recent posts