Programmers/Level 1

C++ / 프로그래머스 / 로또의 최고 순위와 최저 순위

GitHubSeob 2021. 8. 4. 01:34

문제

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

 

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

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

programmers.co.kr

 

 

 

문제풀이

lottos의 숫자와 win_nums의 숫자가 같은 개수를 찾는 문제이다.

실제 로또와 다른 점은 0이 있다는 점이다.

만약 0이 당첨숫자이면 최고 순위, 0이 당첨숫자가 아니면 최저 순위이다.

따라서 0이 아닌 수 일 때는 둘의 번호가 일치하는지 확인하고, 0인 수가 있으면 따로 변수를 지정하여 개수를 센다.

5등까지는 등수+일치한 번호 개수 = 7이다.

최고 순위 = answer[0], 최저 순위 = answer[1]

당첨 개수와 0의 개수가 2 이상이라면 answer[0]에 7-(당첨 개수+0의 개수)의 값을 넣어주고,

2 미만 이면 answer[0]에 6 값을 넣는다.

answer[1]은 당첨 개수로만 판별한다.

 

코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int win = 0;
    int zero = 0;
    int x = 0, x2 = 0;
    for (x = 0; x < 6; ++x) {
        if (lottos[x] == 0) zero++;
        else {
            for (x2 = 0; x2 < 6; ++x2) {
                if (lottos[x] == win_nums[x2]) {
                    win++;
                    break;
                }
            }
        }
    }
    if ((win + zero) >= 2) answer.push_back(7 - (win + zero));
    else answer.push_back(6);
    if (win >= 2) answer.push_back(7 - win);
    else answer.push_back(6);

    return answer;
}