https://school.programmers.co.kr/learn/courses/30/lessons/77484#
이 문제는 그리드 알고르즘으로 해결할 수 있다.
최저 순위의 경우 0인 경우가 다 틀렸을 때이다.
최고 순위의 경우 0인 경우가 다 맞을 때이다. 이때 0과 매칭시킬 숫자가 중복이 안될 경우만 해당하는데 문제의 제한 상황에 보면 같은 숫자는 절대 나올 수 없으며, lottos배열과 win_num배열의 크기는 같기 때문에 0인 경우가 다 맞을 때가 최고 순위로 생각할 수 있다.
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
vector<int> match;
int N, L, W;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
// 최저 : 0인 경우가 다 틀렸을 때
// 최고 : 0인 경우가 다 맞았을 때 (단, 중복이 안될경우)
N = lottos.size();
int maxRank = 0, minRank = 0;
int zeroNum = 0;
for(int i = 0;i<N;i++){
int num = count(lottos.begin(),lottos.end(),win_nums[i]);
if(num > 0)
minRank++;
}
for(int i = 0;i<N;i++){
if(lottos[i] == 0)
zeroNum++;
}
maxRank = minRank + zeroNum;
if(minRank < 2) minRank = 1;
if(maxRank == 0) maxRank = 1;
answer.push_back(7 - maxRank);
answer.push_back(7 - minRank);
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 1] 옹알이 (2) (0) | 2024.06.08 |
---|---|
[Lv 1] 콜라 문제 (0) | 2024.06.07 |
[Lv 1] 숫자 문자열과 영단어 (0) | 2024.06.07 |
[Lv 1] 신고 결과 받기 (0) | 2024.06.07 |
[Lv 1] 성격 유형 검사하기 (0) | 2024.06.07 |