GitHubSeob

C++ / 프로그래머스 / 숫자 게임 본문

Programmers/Level 3

C++ / 프로그래머스 / 숫자 게임

GitHubSeob 2023. 7. 7.
문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/12987

 

프로그래머스

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

programmers.co.kr

문제풀이

 

B팀이 승점을 가장 높이는 방법을 구하는 것이다.

그래서 A팀의 승점은 신경 쓰지 않고 문제를 풀었다.

 

먼저 A팀을 내림차순으로 정렬한다, lower_bound를 이용할 것이기 때문에 B팀은 오름차순으로 정렬한다.

A팀의 점수를 탐색하면서 B팀에 A팀 점수+1 값이 있는지를 lower_bound를 이용해 확인한다.

만약 있다면 B팀의 승점을 1 더하고 사용했으므로 삭제한다.

만약 없다면 B팀의 가장 낮은 점수를 내고 점수를 삭제한다.

 

코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> A, vector<int> B) {
    int answer(0), idx(0), idx2(0);
    sort(A.begin(), A.end(), greater<int>());
    sort(B.begin(), B.end());

    for (idx = 0; idx < A.size(); ++idx) {
        idx2 = lower_bound(B.begin(), B.end(), A[idx] + 1) - B.begin();
        if (idx2 < B.size()) {
            answer++;
        }
        B.erase(B.begin() + idx2 % B.size());
    }
    return answer;
}