알고리즘 문제/프로그래머스

숫자 게임[Lv. 3]

우대비 2024. 8. 3. 20:51
반응형
 

프로그래머스

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

programmers.co.kr

N명씩 두 개의 팀이 있습니다. 각 팀원들은 숫자카드를 하나씩 가지고 있고 각 팀별로 한명 씩 나와서 게임을 시작합니다.

나의 숫자가 더 크면 승리, 같으면 무승부, 작으면 패배입니다.

팀 A의 숫자와 순서를 알고있을 때 팀 B가 가질 수 있는 최대 승리횟수를 찾아주세요

 

풀이 방법

1. 두 팀의 숫자를 내림차순 정렬을 해줍니다.

 

2. 두 팀의 가장 큰 수를 각각 뽑아서 비교합니다.

 

3. A 카드 보다 B 카드가 더 크다면 answer에 +1을 해주고 A카드와 B카드 모두 삭제해줍니다.

 

4. A 카드가 B 카드보다 더 크거나 같다면 A 카드보다 큰 수는 없기 때문에 A카드만 삭제후 2번으로 돌아가 반복합니다.

(B 카드는 삭제하지 않고 다음에 다시 이길 수 있는 숫자가 있는지 체크합니다.)

 

정답 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> A, vector<int> B) {

    sort(A.begin(), A.end(), [](int& a, int& b) {return a > b; });
    sort(B.begin(), B.end(), [](int& a, int& b) {return a > b; });

    int answer = 0;
    for (int idx_a = 0, idx_b = 0; idx_a < A.size(); idx_a++)
    {
        int numA = A[idx_a];
        int numB = B[idx_b];

        if (numA < numB)
        {
            answer++;
            idx_b++;
        }
    }
    return answer;
}
반응형
LIST

'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글

징검다리 건너기 [Lv. 3]  (0) 2024.09.17
기지국 설치 [Lv. 3]  (1) 2024.09.07
최고의 집합 [Lv. 3] (C++)  (0) 2024.08.03
이중우선순위큐 [Lv. 3]  (0) 2024.07.23
보석 쇼핑 [LV. 3] (C++)  (0) 2024.07.21