Algorithm/Programmers

[Programmers - c++] 로또의 최고 순위와 최저 순위

tjddneva 2022. 2. 6. 19:59

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

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

set 을 안쓰고도 풀 수 있을 거 같은데 set 자료구조의 find 함수가 뭔가 굉장히 편리해서 이거 쓰려고 구지 win_nums 배열에 있는 원소들을 set 으로 옮겨 담았다. 그 후 lottos vector 의 원소를 뽑아와서 set 에 있으면 변수 correct 를 1 증가시키고 만약 뽑아온 원소가 0 이면 변수 hope 를 1 증가시킨다. 

이후에 예외 처리를 해주어야 하는데 바로 correct 가 0 인 경우와 correct, hope 둘 다 0 인 경우이다. 이 경우에는 등수가 7등이 나오게 되어있는데 이를 6등으로만 바꾸어주면 끝이다. 코드를 보면 직관적으로 이해할 수 있다.

 

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

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    set<int> s;
    int correct = 0;
    int hope = 0;
    
    for(auto c : win_nums){
        s.insert(c);
    }
    
    for(auto c : lottos){
        if(c!=0){
            auto it = s.find(c);
            if(it != s.end()){
                correct++;
            }
        }
        else{
            hope++;
        }
    }
    
    int rank1 = 7 - correct - hope;
    int rank2 = 7 - correct;
    if(rank1 == 7) rank1 = 6;
    if(rank2 == 7) rank2 = 6;
    
    answer.push_back(rank1);
    answer.push_back(rank2);
    
    return answer;
}