본문 바로가기
C C++/C C++ 백준

[C/C++] 로또의 최고 순위와 최저 순위 (Lv1)

by Go! Jake 2022. 7. 10.

문제 풀이

이번 문제는 아래 3가지 포인트가 있습니다.

1) 배열끼리의 비교하여 동일한 값이 몇 개인지 확인

=> for문을 2번 써서 O(N^2)의 시간 복잡도를 가졌지만, 필요한 경우 각각 정렬하여 인덱스별로 동일한지 확인하는 방식이 빠를 것 같다.

2) 배열에 0이 몇개인지 확인

3) 동일한 값 + 0의 개수로 최고 순위 구하기, 동일한 값으로 최저 순위 구하기

=> 순위를 구할 때 순위를 미리 배열(int rank[7])에 저장 해 둬서 인덱스만 참조하면 등수를 불러올 수 있도록 하였다.

소스코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// lottos_len은 배열 lottos의 길이입니다.
// win_nums_len은 배열 win_nums의 길이입니다.
int* solution(int lottos[], size_t lottos_len, int win_nums[], size_t win_nums_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    int count_zero=0;
    int count=0;
    int max=0;
    int min=0;
    int rank[7] = {6,6,5,4,3,2,1};
    int* answer = (int*)malloc(sizeof(int)*2);

    for (int i=0; i<lottos_len; i++)
    {
        if (lottos[i]==0)
        {
            count_zero++;
        }
        for (int j=0; j<win_nums_len; j++)
        {
            if (lottos[i]==win_nums[j])
                count++;
        }
    }
    answer[0]=rank[count+count_zero];
	answer[1]=rank[count];

    return answer;
}

 

댓글