문제


문제 해석
- 입력의 갯수가 6개, 6개 이고, 각 입력의 범위는 0~45인 정수(겹치지 않아서 추가적인 지역변수로 set사용도 고려해보았으나 굳이 메모리를 더 만들 필요는 없어보였다.)
- 0인 경우 지워진 숫자이기에 최대 당첨수를 증가시키고
- 아닌 경우 중첩 반복문으로 숫자를 맞출 수 있는지 검색한다.
- 2번 문제가 예외케이스를 주는데, 모두 지워진 경우 6등 처리를 해 주어야 한다.
- 전부 다 틀린 경우에 6등이 나오기 위해 예외처리를 해 주어야 한다.
코드
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
// 효율적인 순차검색을 위한 정렬 수행
sort(lottos.begin(), lottos.end());
sort(win_nums.begin(), win_nums.end());
int ZeroHit = 0;
int NumberHit = 0;
int NumberMaxCount = lottos.size();
for(int Index = 0; Index < NumberMaxCount; ++Index)
{
if(lottos[Index] == 0)
{
++ZeroHit;
continue;
}
for(int WinNumIndex = 0; WinNumIndex < NumberMaxCount; ++WinNumIndex)
{
if(lottos[Index] == win_nums[WinNumIndex])
{
++NumberHit;
break;
}
}
}
// 전부 다 틀렸을 경우 6등이 나오기 위한 예외처리
if(ZeroHit == 0 && NumberHit == 0)
{
++NumberHit;
}
answer.push_back(7-(ZeroHit + NumberHit));
// 모두 지워진 경우 6등이 나오기 위한 예외처리
if(NumberHit == 0 && ZeroHit == 6)
{
++NumberHit;
}
answer.push_back(7-(NumberHit));
return answer;
}
다른 사람의 풀이
- 한 번 방문, 테스트 케이스를 잘 활용해서 0의 개수와 일치하는 번호의 개수를 적절히 담아 풀이
- 등수를 배열에 담아 0개와 1개를 맞추는 경우를 별도의 예외처리 없이 처리하는 풀이
회고
- 1개를 맞추는 경우와 1개도 못 맞춘 경우를 예외처리로 처리했는데 등수를 배열에 담는 방식을 사용했어도 좋았다 생각이 되었다.