#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int match = 0;
int zero = 0;
int min = 6;
int max;
for(int i = 0; i < win_nums.size(); i++){
for(int j = 0; j < lottos.size(); j++){
if(win_nums[i] == lottos[j]){
match++;
break;
}
}
}
for(int j = 0; j < lottos.size(); j++){
if(lottos[j] == 0){
zero++;
}
}
printf("match : %d, zero : %d", match, zero);
switch(match){
case 2 :
min = 5;
break;
case 3 :
min = 4;
break;
case 4 :
min = 3;
break;
case 5 :
min = 2;
break;
case 6 :
min = 1;
break;
}
if(match == 0){
if(zero == 0){
max = 6;
} else if(zero == 1){
max = 6;
} else if(zero == 2){
max = 5;
} else if(zero == 3){
max = 4;
} else if(zero == 4){
max = 3;
} else if(zero == 5){
max = 2;
} else if(zero == 6){
max = 1;
}
} else {
max = min - zero;
}
answer.push_back(max);
answer.push_back(min);
return answer;
}
너무 사짜로 푼 것 같은 이 기분. 그냥 반복문이랑 switch case문 써서 모든 경우를 구해주면 된다. 더 효율적인 방법이 있나?
굳이 주의해야할 점이라면 1개 번호가 일치하는 경우에도 꼴찌이기 때문에 이러한 경우를 별도로 생각하여 등수를 구해줘야한다는 것이다.
지금 생각해보면 0일 때 저렇게 경우를 따로 생각하지 않고 그냥 -1을 해주면 될 뻔 했다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
int match = 0;
int zero = 0;
int min = 6;
int max;
for(int i = 0; i < win_nums.size(); i++){
for(int j = 0; j < lottos.size(); j++){
if(win_nums[i] == lottos[j]){
match++;
break;
}
}
}
for(int j = 0; j < lottos.size(); j++){
if(lottos[j] == 0){
zero++;
}
}
printf("match : %d, zero : %d", match, zero);
switch(match){
case 2 :
min = 5;
break;
case 3 :
min = 4;
break;
case 4 :
min = 3;
break;
case 5 :
min = 2;
break;
case 6 :
min = 1;
break;
}
if(match == 0){
if(zero == 0 || zero == 1){
max = 6;
} else {
max = min - zero + 1;
}
} else {
max = min - zero;
}
answer.push_back(max);
answer.push_back(min);
return answer;
}
이게 훨씬 코드도 짧고 깔끔하다!