문제 풀이
이번 문제는 아래 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;
}
'C C++ > C C++ 백준' 카테고리의 다른 글
[C/C++] 백준 10974번 모든 순열 (0) | 2022.10.09 |
---|---|
[C/C++] 백준 15651번 N과 M (3) (0) | 2022.10.09 |
C언어 백준 9012번 괄호 (0) | 2022.07.10 |
C언어 백준 11004번 K번째 수 (0) | 2022.07.10 |
C언어 백준 10989번 수 정렬하기 3 (0) | 2022.07.02 |
댓글