Algorithm/Programmers
[Programmers - c++] 로또의 최고 순위와 최저 순위
tjddneva
2022. 2. 6. 19:59
https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
set 을 안쓰고도 풀 수 있을 거 같은데 set 자료구조의 find 함수가 뭔가 굉장히 편리해서 이거 쓰려고 구지 win_nums 배열에 있는 원소들을 set 으로 옮겨 담았다. 그 후 lottos vector 의 원소를 뽑아와서 set 에 있으면 변수 correct 를 1 증가시키고 만약 뽑아온 원소가 0 이면 변수 hope 를 1 증가시킨다.
이후에 예외 처리를 해주어야 하는데 바로 correct 가 0 인 경우와 correct, hope 둘 다 0 인 경우이다. 이 경우에는 등수가 7등이 나오게 되어있는데 이를 6등으로만 바꾸어주면 끝이다. 코드를 보면 직관적으로 이해할 수 있다.
#include <string>
#include <vector>
#include <set>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
set<int> s;
int correct = 0;
int hope = 0;
for(auto c : win_nums){
s.insert(c);
}
for(auto c : lottos){
if(c!=0){
auto it = s.find(c);
if(it != s.end()){
correct++;
}
}
else{
hope++;
}
}
int rank1 = 7 - correct - hope;
int rank2 = 7 - correct;
if(rank1 == 7) rank1 = 6;
if(rank2 == 7) rank2 = 6;
answer.push_back(rank1);
answer.push_back(rank2);
return answer;
}