알고리즘/프로그래머스 1단계

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

게임만드는학생 2024. 7. 23. 15:10

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    int cnt=0;
    int zeroCnt=0;
    for(int i=0;i<6;i++)
    {
        if(lottos[i]==0)
            zeroCnt++;
        for(int j=0;j<6;j++)
        {
            if(lottos[i]==win_nums[j])
                cnt++;
        }
    }
    
    int maxCnt = 7 - (cnt + zeroCnt);
    int minCnt = 7 - cnt;
    if(maxCnt>=7)maxCnt=6;
    if(minCnt>=7)minCnt=6;
    answer.push_back(maxCnt);
    answer.push_back(minCnt);
    
    return answer;
}

이 문제는 나의 로또번호와 당첨 로또번호가 주어지면 지워진 로또번호에 대해서 최고,최저 몇등이 가능할지에 대해 리턴하는 문제이다. 

 

지워진 숫자는 0으로 표시된다. 

 

아주 간단하게 풀이가 가능하다. 

0의 개수에 따라서 순위가 나눠진다. 

 

0이 전부 당첨 번호라면

맞춘 번호 + 0의 개수는 최고 등수

 

0이 전부 당첨 번호가 아니라면

맞춘 번호는 최저 등수이다.

 

따라서 0의 개수와 일치한 번호개수만 구하면 된다. 

 

코드 풀이

두 벡터의 크기는 6으로 고정이기 때문에 이중 반복문으로 탐색한다. 

0의 개수와 일치하는 번호의 개수를 센다. 

 

int maxCnt = 7 - (cnt + zeroCnt);
    int minCnt = 7 - cnt;
    if(maxCnt>=7)maxCnt=6;
    if(minCnt>=7)minCnt=6;

최고등수는 둘의 합에서 7을 빼서 등수를 구한다.

최저등수는 맞춘개수에서 7을 빼서 등수를 구한다.

 

예외적으로 하나도 맞추지 못한다면 답이 7이 되기 때문에 if문으로 6으로 만들어준다.