본문으로 바로가기

프로그래머스 - 숫자 게임

category 프로그래머스 2021. 4. 9. 01:41

출처 : programmers.co.kr/learn/courses/30/lessons/12987

 

코딩테스트 연습 - 숫자 게임

xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로

programmers.co.kr

 

고려사항

  • 우선 문제에 주어진 A 팀의 순서는 무시해도 된다.
  • A 와 B 모두 정렬해준다.
  • 서로 큰 수 끼리 비교를 한다. ( 뒤에서 부터 접근! )
  • B 팀이 점수를 얻을 경우에는 A, B 모두 뒤의 숫자를 사용한다. ( pop_back )
  • B 팀이 점수를 얻지 못할 경우에는 B 팀의 제일 작은 수 ( 앞의 수 ) 를 소모한다. ( pop_front )
    즉, 어차피 이기지 못할 때엔, 제일 이길 확률이 낮은, 작은 수를 상대팀의 큰 수와 함께 사용한다!

 

#include <string>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;

bool check(int a, int b){
    return a < b;
}

int solution(vector<int> A, vector<int> B) {
    deque<int> a, b;
    int len = A.size();
    int answer = 0, numA, numB;
    
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    
    for(int i=0;i<len;++i){
        a.push_back(A[i]);
        b.push_back(B[i]);
    }
    
    while(!a.empty()){
        if(a.back() >= b.back()){
            numA = a.back();
            numB = b.front();
            
            if(check(numA, numB)){
                ++answer;
            }
            
            a.pop_back();
            b.pop_front();
        }else{
            numA = a.back();
            numB = b.back();
            
            if(check(numA, numB)){
                ++answer;
            }
            
            a.pop_back();
            b.pop_back();
        }
    }
    
    return answer;
}