문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/77484
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 설명]
이 문제는 구매한 로또 번호를 담은 배열 lottos와 당첨 번호를 담은 배열 win_nums가 매개변수로 주어졌을 때 당첨 가능한 최고 순위와 최저 순위를 구하는 문제이다. 이때, 알아볼 수 없는 번호가 존재한다.
[문제 풀이]
단순 구현 문제로 당첨 번호와 일치하는 숫자 개수에 따라 최저 순위가 결정되고, (당첨 번호와 일치하는 숫자 개수 + 0의 개수)에 따라 최고 순위가 결정된다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int zero_cnt = 0, cnt = 0; // zero_cnt: 0의 개수(어느 숫자와도 일치시킬 수 있음), cnt: 일치하는 숫자의 개수
int max_rank, min_rank; // max_rank: 최고 순위, min_rank: 최저 순위
for(int i = 0; i < lottos.size(); i++){
if(lottos[i] == 0){
zero_cnt++; // 0의 개수 카운트
continue;
}
for(int j = 0; j < win_nums.size(); j++){
if(lottos[i] == win_nums[j]){
cnt++; // 당첨 번호와 일치하는 숫자 개수 카운트
win_nums.erase(win_nums.begin()+j); // 벡터의 j번째 원소 제거하기(v.begin(): 벡터의 시작 주소)
}
}
}
if(cnt < 2)
min_rank = 6;
else
min_rank = 7 - cnt;
if(zero_cnt + cnt < 2)
max_rank = 6;
else
max_rank = 7 - (zero_cnt + cnt);
answer.push_back(max_rank);
answer.push_back(min_rank);
return answer;
}