Programmers Review
[Lv 1] 로또의 최고 순위와 최저 순위
hanseongbugi
2024. 6. 7. 17:53
https://school.programmers.co.kr/learn/courses/30/lessons/77484#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제는 그리드 알고르즘으로 해결할 수 있다.
최저 순위의 경우 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;
}