프로그래머스의 로또의 최고 순위와 최저 순위(Lv1) 문제이다.

 

[ 문제풀이 ]

로또 번호 6개 중에서, 알 수 없는 번호들이 주어졌을 때 최고 순위와 최저 순위를 맞춰야 하는 문제이다.

 

먼저 간단한 예시를 한 가지 들어보자.

로또 당첨 번호가 [ 1 , 2 , 3 , 4 , 5 , 6 ] 이고 민우가 가지고 있는 로또 번호가 [ 1 , 2 , 3 , 4 , 0 , 0 ] 이라고 가정해보자.

이 상황에서 최고순위는 1등이 될 것이다.

왜냐하면, 로또 번호를 [ 1 , 2 , 3 , 4 , 5 , 6 ] 으로 바꿔버리면 모든 숫자가 일치하기 때문이다.

반대로, 최저순위는 3등이 될 것이다.

[ 1 , 2 , 3 , 4 , 0 , 0 ] 에서 존재하는 [ 0 , 0 ]을 [ 5 , 6 ] 을 제외한 나머지 어떤 숫자로 바꾸기만 하면, [ 1 , 2 , 3 , 4 ] 4개만 맞추는 꼴이 되기 때문이다.

 

여기서 핵심은, "무슨 숫자로 바꿀지는 알 필요가 없다" 라는 것이다. 단지, 몇 개의 숫자를 알 수 없는지 그리고 몇 개의 숫자가 일치하는지 이 갯수만 알고 있으면 된다.

[ 1 , 2 , 3 , 4 , 5 , 6 ]

[ 1 , 2 , 3 , 4 , 0 , 0 ] 이 있다.

여기서 이미 [ 1 , 2 , 3 , 4 ] 4개의 숫자는 일치하는 숫자들이다.

그리고, 알 수 없는 숫자는 [ 0 , 0 ] 2개이다.

여기서 최고순위는 "일치하는 숫자의 갯수 + 알 수 없는 숫자의 갯수" 가 된다.

즉 ! 위의 예시에서는 4 + 2 = 6개를 맞췄을 때가 최고 순위가 된다.

반대로, 최저순위는 "일치하는 숫자의 갯수" 가 된다.

즉 ! 위의 예시에서는 4개를 맞췄을 때가 최저 순위가 된다.

 

한 가지 예를 더 들어보자.

[ 1 , 2 , 3 , 4 , 5 , 6 ]

[ 7 , 8 , 9 , 0 , 0 , 0 ]

위와 같은 예시가 있다고 가정해보자.

일치하는 숫자의 갯수 = 0 개

알 수 없는 숫자의 갯수 = 3개 인 상태이다.

여기에서 최고순위는 "일치하는 숫자의 갯수 + 알 수 없는 숫자의 갯수" 인 0 + 3 = 3개를 맞췄을 때가 최고 순위가 된다.

반대로, 최저순위는 "일치하는 숫자의 갯수" 인 0개를 맞췄을 때가 최저 순위가 된다.

 

이처럼, 주어진 상태를 보고 일치하는 숫자의 갯수와, 알 수 없는 숫자의 갯수를 통해서 최고순위와 최저순위를 구할 수가 있다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <string>
#include <vector>
using namespace std;
 
int Convert(int x)
{
    if (x == 6return 1;
    if (x == 5return 2;
    if (x == 4return 3;
    if (x == 3return 4;
    if (x == 2return 5;
    return 6;
}
 
vector<int> solution(vector<int> lottos, vector<int> win_nums) 
{
    vector<int> answer(2);
    int Zero_Cnt = 0;
    int Same_Cnt = 0;
    for (int i = 0; i < lottos.size(); i++)
    {
        if (lottos[i] == 0)    Zero_Cnt++;
        else
        {
            for (int j = 0; j < win_nums.size(); j++)
            {
                if (lottos[i] == win_nums[j])
                {
                    Same_Cnt++;
                    break;
                }
            }
        }
    }
    
    int Low = Same_Cnt;
    int High = Same_Cnt + Zero_Cnt;
    High = Convert(High);
    Low = Convert(Low);
    answer = { High , Low };
    return answer;
}
cs

 

 

 

+ Recent posts