알고리즘 문제풀이/프로그래머스

[프로그래머스/Level 1] 로또의 최고 순위와 최저 순위 (C++)

노력의천재 2021. 4. 28. 17:50

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

 

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

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

programmers.co.kr

처음에 map을 이용하는 줄 알고 해매느라 시간이 좀 오래걸린게 아쉬웠습니다. 풀이는 단순히 완전탐색을 통해 번호 같은 수 갯수를 찾고, lottos 배열의 값이 0인 갯수를 찾습니다. 최고 순위는 same(같은 갯수) + zero(0의 갯수), 최저 순위는 same(같은 갯수)가 됩니다. 

 

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

int getRank(int num) {
    if(num == 6) return 1;
    else if(num == 5) return 2;
    else if(num == 4) return 3;
    else if(num == 3) return 4;
    else if(num == 2) return 5;
    else return 6;
}

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int same = 0, zero = 0;
    for(int i = 0; i < lottos.size(); i++) {
        if(lottos[i] == 0) zero++;
        for(int j = 0; j < win_nums.size(); j++) {
            if(lottos[i] == win_nums[j]) same++;
        }
    }
    
    int maxx = getRank(same + zero);
    int minn = getRank(same);
    
    answer.push_back(maxx);
    answer.push_back(minn);
    
    return answer;
}