프로그래밍/코딩테스트

코딩테스트 : 로또의 최고 순위와 최저 순위

백사니 2025. 4. 17. 07:51
728x90
반응형

문제 설명
해당 문제는 알아볼 수 없는 번호(0)를 포함한 로또 번호와 당첨 번호를 비교해 최고 순위와 최저 순위를 구하는 문제이다.

 

 

최고 순위: 0을 전부 당첨 번호라고 가정할 때의 일치 개수로 계산

최저 순위: 0을 전부 틀린 번호라고 가정할 때의 일치 개수로 계산

 

핵심 풀이 방법

0의 개수는 맞았다고 가정했을 때 최고 순위를 결정짓는 요소다.

실제로 맞은 번호는 win_nums에 존재하는 lottos 숫자 개수로 확인할 수 있다.

최고 순위는 (맞은 개수 + 0의 개수)로 계산하고,

최저 순위는 (맞은 개수)로 계산한다.

등수는 6개 맞으면 1등, 5개면 2등 ... 2개면 5등, 그 외는 6등이다.

 

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

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    // 결과를 저장할 벡터를 7로 초기화 (7등은 없지만 나중에 보정할 때 사용)
    vector<int> answer(2, 7);

    // 0은 알아볼 수 없는 숫자이므로 최고 등수 계산 시 맞았다고 가정
    for(int i : lottos)
    {
        if(i == 0)
        {
            answer[0]--; // 최고 등수 등급 하나 상승 (번호 하나 맞았다고 가정)
        }
    }

    // 당첨 번호와 일치하는 번호를 찾아서 최고/최저 모두 순위 상승
    for(int number : win_nums)
    {
        // 현재 번호가 lottos 안에 있는지 확인
        if(find(lottos.begin(), lottos.end(), number) != lottos.end())
        {
            answer[0]--; // 최고 등수 등급 하나 상승
            answer[1]--; // 최저 등수 등급 하나 상승
        }
    }

    // 등수가 7이면 낙첨 처리 (6등으로 보정)
    for(int& i : answer)
    {
        if(i == 7)
            i = 6;
    }

    return answer;
}

 

728x90
반응형