본문으로 바로가기

출처 : 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;
}