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