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

다곰·2023년 4월 26일
0

우당탕탕 코테준비

목록 보기
53/98

✅ LV.3

📌 Summer/Winter Coding(~2018)

✏️ 1차 솔루션

⭐️ upper_bound 활용

  1. B 오름차순 정렬, B 의 숫자 활용 여부는 bool vector 로 방문처리해서 확인
  2. A 를 돌면서 해당 숫자보다 큰 수가 B 에 있는지 확인하면서 점수 갱신
    1) upper_bound 로 B 에 현재 A 보다 큰 숫자가 있으면 해당 인덱스 방문처리
    2) B 에 더 큰 숫자가 없으면 B 의 작은 수들 중에서 제일 작은 수 방문처리

✏️ 최종 솔루션

A-B가 한 쌍으로 1:1 매칭되기만 하면 되고 굳이 주어진 배열 순서를 지킬 필요는 없음

  1. A와 B 모두 오름차순 정렬
  2. A의 인덱스는 따로 초기화
  3. B 를 돌면서 B 의 현재 숫자가 A 의 현재 인덱스 숫자보다 크면 A 의 인덱스 갱신하고 승리 횟수도 늘려줌
    ➡️ B 가 계속 A 보다 작아서 A 의 인덱스가 늘어나지 않아서 계속 A 의 특정 수와 B 를 비교하게 되더라도 그렇게 되면 어차피 B 가 계속 패배한다는 의미이기 때문에 그렇게 for 문 끝나도 ㄱㅊ

📌 self feedback

1차 풀이로도 시초없이 잘 돌아가기는 함
하지만, A팀 출전 순서가 고정되어있다고 생각해서 A 는 별도로 정렬할 수 없다고 생각해버려서 문제를 꼬아서 풀이해버림

✏️ 최종 code

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

using namespace std;

int solution(vector<int> A, vector<int> B) {
    int answer = 0,idx=0;
    
    sort(A.begin(),A.end());
    sort(B.begin(),B.end());
    
    for(int i=0;i<B.size();i++) {
        if(A[idx]<B[i]) {
            idx++;
            answer++;
        }
    }
    
    return answer;
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글