Coding Test/programmers

[프로그래머스] 로또의 최고 순위와 최저 순위 c++

owls 2022. 8. 18. 12:13
728x90

문제 설명

내가 고른 번호는 lottos 벡터에 저장되어 있고, 0은 알 수 없는 수이다.

당첨 번호는 win_nums 벡터에 저장되어 있다.

 

내가 고른 로또의 최고 순위와 최저 순위를 구하는 문제이다.

 

제한 사항

  • lottos는 길이 6인 정수 배열입니다.
  • lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
    • 0은 알아볼 수 없는 숫자를 의미합니다.
    • 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
    • lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
  • win_nums은 길이 6인 정수 배열입니다.
  • win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
    • win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
    • win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

입출력 예

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

풀이

check point!

1. 0 개수 = zero

2. 0이 아닌 원소 중 당첨된 번호 개수 = cnt

 

위의 1, 2번을 이용하여 최대 순위, 최소 순위를 구할 수 있다.

#include <string>
#include <vector>


using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    int zero = 0, cnt = 0;
    for(const auto &it : lottos){
        if( 0 == it){
            zero += 1;
        }
    }
    
    for(const auto &lo : lottos){
        for(const auto &win : win_nums){
            if(lo == win){
                cnt++;
                break;
            }
        }
    }
    
    if( cnt == 0){
        cnt++;
        if(zero == 6){
            zero--;
        }
    }
    
    int a = 7 - (zero + cnt);
    int b = 7 - cnt;
    
    answer.push_back(a);
    answer.push_back(b);
    
    return answer;
}

 

 

728x90