[프로그래머스/C++]Lv.1 - 로또의 최고 순위와 최저 순위

YH J·2023년 5월 25일
0

프로그래머스

목록 보기
98/168

문제 링크

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

내 풀이

lottos에서 0의 갯수와 win_nums와 비교해서 일치하는 숫자의 갯수를 구한 뒤
구한 갯수들로 결과를 만든다.

내 코드

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

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int num = 0;
    int zero = 0;
    for(const auto& l : lottos)
    {
        if(l == 0)
        {
            zero++;
            continue;
        }
        if(find(win_nums.begin(), win_nums.end(),l) != win_nums.end())
            num++;
    }
    answer.push_back(7 - (zero + num) < 0 ? 1 : 7 - (zero + num) > 6 ? 6 : 7 - (zero + num));
    answer.push_back(7 - num >= 6 ? 6 : 7 - num);
    
    return answer;
}

다른 사람의 풀이

#include <string>
#include <vector>

using namespace std;

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

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;

    // 0의 갯수를 담는 변수
    int zero = 0;
    for(int i = 0; i < lottos.size(); i++){
        if(lottos[i] == 0) zero++;
    }

    // lottos와 win_nums에서 일치하는 번호 갯수를 담는 변수
    int check = 0;
    int visited[6] = {0,};
    for(int i = 0; i < lottos.size(); i++){
        for(int j = 0; j < win_nums.size(); j++){
            if(visited[i] == 0 && lottos[i] == win_nums[j]){
                visited[i] = 1;
                check++;
            }
        }
    }

    answer.push_back(func(zero+check));
    answer.push_back(func(check));
    return answer;
}

다른 사람의 풀이 해석

zero는 따로 담고 visited배열을 만들어서 한번 탐색한 win_nums의 숫자는 다시 체크하지 않도록 하였다. 0의 갯수와 일치한 숫자의 갯수로 계산할때 외부 함수로 구현하여 계산해주었다.

profile
게임 개발자 지망생

0개의 댓글