본문 바로가기
문제 풀이/프로그래머스 (Programmers)

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

by 희조당 2021. 7. 1.
728x90

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

 

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

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

programmers.co.kr


문제 풀이

 알아볼 수 없는 숫자(0)의 개수는 unknown으로 저장하고 그 외에 숫자를 당첨 숫자에 비교해서 cnt에 저장한다.

0이 모두 당첨 숫자가 된다면 rank는 최고가 될 것이고 모두 당첨 숫자가 아니라면 rank가 최저가 될 것이다.

따라서 cnt에 unknown을 더한 값을 계산했을 때 최고 순위, cnt만 따질 때 최저 순위가 된다.

느낀 점

 문제가 쉽기 때문에 코드를 최대한 간단하게 작성하려고 했다. 최선으로 작성했는데 다른 분들의 코드에 비교하면 나름 적당한 길이인 것 같다.

코드

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

using namespace std;

int get_rank(int num) {
    if (num <= 1) return 6;
    return 7 - num;
}

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int unknown = 0, cnt = 0;
    for (int l : lottos) {
        if (l == 0) unknown++;
        for (int i = 0; i < 6; i++) {
            if (l == win_nums[i]) cnt++;
        }
    }
    answer.push_back(get_rank(unknown + cnt));
    answer.push_back(get_rank(cnt));
    return answer;
}

댓글