C++:: 프로그래머스 < 숫자 게임 >

jahlee·2023년 10월 11일
0

프로그래머스_Lv.3

목록 보기
20/29

제한사항들을 확인해 보면 최적의 계산이 필요한 문제임을 알 수 있다. 해당풀이는 두 배열을 오름차순으로 정렬하고 B[i] 가 A의 원소들중 몇번째로 큰지를 체크해주어서 이기는 회수를 최대로 계산하는 풀이이다.

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

int solution(vector<int> A, vector<int> B) {
    int answer = 0;
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    for (int i=0; i<B.size(); i++) {
        int cnt = lower_bound(A.begin(), A.end(), B[i]) - A.begin();
        if (cnt - answer) answer++;// B[i]가 이전에 이기는 방법으로 고른 가지수를 빼고도 A의 원소보다 크다면
    }
    return answer;
}

다른 좋은 풀이도 첨부한다.

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

int solution(vector<int> A, vector<int> B) {
    int answer = 0;
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    int win_count = 0;
    for (int i=0, j=0; j<B.size(); j++) {
        if (A[i] < B[j]) {
            i++;
            win_count++;
        }
    }
    return win_count;
}

0개의 댓글