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

Kim Nahyeong·2022년 8월 3일
0

프로그래머스

목록 보기
16/38


#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    int match = 0;
    int zero = 0;
    int min = 6;
    int max;
    
    for(int i = 0; i < win_nums.size(); i++){
        for(int j = 0; j < lottos.size(); j++){
            if(win_nums[i] == lottos[j]){
                match++;
                break;
            }
        }
    }
    
    for(int j = 0; j < lottos.size(); j++){
        if(lottos[j] == 0){
            zero++;
        }
    }
    
    printf("match : %d, zero : %d", match, zero);
    
    switch(match){
        case 2 :
            min = 5;
            break;
        case 3 :
            min = 4;
            break;
        case 4 :
            min = 3;
            break;
        case 5 :
            min = 2;
            break;
        case 6 :
            min = 1;
            break;
    }
    
    if(match == 0){
        if(zero == 0){
            max = 6;
        } else if(zero == 1){
            max = 6;
        } else if(zero == 2){
            max = 5;
        } else if(zero == 3){
            max = 4;
        } else if(zero == 4){
            max = 3;
        } else if(zero == 5){
            max = 2;
        } else if(zero == 6){
            max = 1;
        }
    } else {
        max = min - zero;
    }
    
    answer.push_back(max);
    answer.push_back(min);
    
    return answer;
}

너무 사짜로 푼 것 같은 이 기분. 그냥 반복문이랑 switch case문 써서 모든 경우를 구해주면 된다. 더 효율적인 방법이 있나?

굳이 주의해야할 점이라면 1개 번호가 일치하는 경우에도 꼴찌이기 때문에 이러한 경우를 별도로 생각하여 등수를 구해줘야한다는 것이다.

지금 생각해보면 0일 때 저렇게 경우를 따로 생각하지 않고 그냥 -1을 해주면 될 뻔 했다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    int match = 0;
    int zero = 0;
    int min = 6;
    int max;
    
    for(int i = 0; i < win_nums.size(); i++){
        for(int j = 0; j < lottos.size(); j++){
            if(win_nums[i] == lottos[j]){
                match++;
                break;
            }
        }
    }
    
    for(int j = 0; j < lottos.size(); j++){
        if(lottos[j] == 0){
            zero++;
        }
    }
    
    printf("match : %d, zero : %d", match, zero);
    
    switch(match){
        case 2 :
            min = 5;
            break;
        case 3 :
            min = 4;
            break;
        case 4 :
            min = 3;
            break;
        case 5 :
            min = 2;
            break;
        case 6 :
            min = 1;
            break;
    }
    
    if(match == 0){
        if(zero == 0 || zero == 1){
            max = 6;
        } else {
            max = min - zero + 1;
        }
    } else {
        max = min - zero;
    }
    
    answer.push_back(max);
    answer.push_back(min);
    
    return answer;
}

이게 훨씬 코드도 짧고 깔끔하다!

0개의 댓글