개발/자료구조, 알고리즘

[코딩 테스트] 프로그래머스 연습 문제 - 로또의 최고 순위와 최저 순위

growing-dev 2023. 5. 22. 14:38

 

프로그래머스 연습 문제 - 로또의 최고 순위와 최저 순위 문제를 풀어보도록 하겠습니다.

 

 

프로그래머스 연습 문제 - 로또의 최고 순위와 최저 순위

 

 

 

 

 문제

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해 보겠습니다. 당첨 번호 6개가 31, 10, 45, 1, 6, 19라면, 당첨 가능한 최고 순위와 최저 순위의 한 예는 아래와 같습니다.

 

0,0이 10과 6이고 4개 번호 일치 시 3등 

0,0이 다 안맞아서  2개 번호 일치 시 2등

 

 

 

 제한사항

 

실제 로또와 동일하게 1~45의 숫자가 가능합니다. 다만 입력의 정해지지 않은 값은 0으로 들어오므로 입력은 0~45가 들어옵니다.

당첨 번호는 같은 숫자가 2개 이상 담겨있지 않습니다. 정렬되지 않았습니다.

 

 

 

 코드

 

 

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

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int same_count = 0;
    int zero_count = 0;

    for(int i=0;i<lottos.size();i++){
        if(lottos[i]==0) {zero_count++; continue;}
        for(int j=0;j<win_nums.size();j++){
            if(lottos[i] == win_nums[j]) {
                same_count++;
            }
        }
    }
    if(same_count ==0 && zero_count == 0){
        answer.push_back(6);    
        answer.push_back(6);    
    }
    else {
        int a = 7-same_count;
        answer.push_back(a-zero_count);
        if(same_count == 0) a = 6;
        answer.push_back(a);
    }

    
    return answer;
}

 

 

 

 결론

 

실제 로또를 활용한 문제로 이해하기 어렵지 않았습니다. 구현 또한 조금 길어지긴 했지만 단순했습니다.

반응형