Programmers Review

[Lv 1] 로또의 최고 순위와 최저 순위

hanseongbugi 2024. 6. 7. 17:53

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

 

프로그래머스

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

programmers.co.kr

 

이 문제는 그리드 알고르즘으로 해결할 수 있다.

최저 순위의 경우 0인 경우가 다 틀렸을 때이다.

최고 순위의 경우 0인 경우가 다 맞을 때이다. 이때 0과 매칭시킬 숫자가 중복이 안될 경우만 해당하는데 문제의 제한 상황에 보면 같은 숫자는 절대 나올 수 없으며, lottos배열과 win_num배열의 크기는 같기 때문에 0인 경우가 다 맞을 때가 최고 순위로 생각할 수 있다.

 

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

using namespace std;
vector<int> match;
int N, L, W;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    // 최저 : 0인 경우가 다 틀렸을 때
    // 최고 : 0인 경우가 다 맞았을 때 (단, 중복이 안될경우)
    N = lottos.size();

    int maxRank = 0, minRank = 0;
    int zeroNum = 0;
    for(int i = 0;i<N;i++){
        int num = count(lottos.begin(),lottos.end(),win_nums[i]);
        if(num > 0)
            minRank++;
    }
    for(int i = 0;i<N;i++){
        if(lottos[i] == 0)
            zeroNum++;
    }
    
    maxRank = minRank + zeroNum;

    if(minRank < 2) minRank = 1;
    if(maxRank == 0) maxRank = 1;
    
    answer.push_back(7 - maxRank);
    answer.push_back(7 - minRank);
    return answer;
}