안녕하세요? 수구리입니다.
이번 예제는 로또와 관련된 예제인데요~
로또를 살면서 아직도 구입을 해보질 않아서 1등 ~ 5등 규칙에 대해서 자세히 몰랐습니다.
하지만 이번 문제를 풀면서 또하나를 알게 되었네요!
그럼 아래의 링크에서 문제를 확인하고 풀이를 보시죠~
[ 문제 ] 1226 : 이번 주 로또
[ 나의 풀이 ]
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int cnt = 0;
bool bonus = false;
vector<int> lotto(7);
vector<int> user(6);
for (int i = 0; i < 7; i++)
cin >> lotto[i];
for (int i = 0; i < 6; i++)
cin >> user[i];
for (int i = 0; i < user.size(); i++){
vector<int>::iterator it = find(lotto.begin(), lotto.end(), user[i]);
// bonus hit
if (*it && *it == lotto.at(6)){
bonus = true;
// hit
} else if (*it) {
cnt++;
// no hit
} else {
continue;
}
}
if (cnt == 6 && bonus == false){
cout << 1;
} else if (cnt == 5 && bonus == true) {
cout << 2;
} else if (cnt == 5) {
cout << 3;
} else if (cnt == 4) {
cout << 4;
} else if (cnt == 3) {
cout << 5;
} else {
cout << 0;
}
}
[ 설명 ]
1. 변수들을 선언해 줍니다. bonus 변수는 bool type으로 true or false 값을 갖습니다. 이 변수를 통해서 1등과 2등을 판별할 수 있도록 해주었습니다.
2. lotto 벡터는 변수명 그대로 당첨 로또 번호입니다. user 벡터는 사용자의 로또 번호입니다. 즉, 등수를 판별해주는 번호가 되겠죠?
3. 연달아 for문 두개는 입력 번호들에 대한 초기화를 lotto, user 차례로 진행합니다.
4. user의 벡터를 차례로 순회하면서 it 이라는 벡터 iterator를 정의하는데 그 값은 find라는 <algorithm> 헤더 파일에 있는 라이브러리로 lotto의 시작과 끝부터 user의 0번째 번호부터 끝가지 있는지 없는지 탐색합니다.
5. if 문에서 본격적으로 등수를 판별하기위해 조건들을 걸어줍니다.
6. 값을 찾았고, 그 번호의 값이 만약 로또 당첨번호의 마지막 보너스 번호라면 bonus 변수를 true로 바꿔줍니다.
7. 그게 아니라 만약 그냥 번호가 있다면 (hit) cnt값인 맞춘 번호의 수를 증가시켜줍니다.
8. 6번과 7번의 경우가 아니라면 번호가 맞지 않은 경우입니다.
9. 그렇게 user의 번호의 끝까지 탐색이 완료 되었다면 cnt 값과 bonus 값을 이용하여 1등부터 5등 그리고 꼴지인 0을 출력해줍니다.
로또 맞고싶다!
'✏️ PS > CodeUp' 카테고리의 다른 글
[ C++ ] Code-Up 2102: 배수 (Hard) (0) | 2021.10.06 |
---|---|
[ C++ ] Code-Up 1088: 3의 배수는 통과 (0) | 2021.09.16 |
[ C++ ] Code-Up 1287: 구구단을 *로 출력하기 (0) | 2021.09.08 |
[ C++ ] Code-Up 1441: 버블 정렬 (0) | 2021.09.08 |
[ C++ ] Code-Up 1713: 두 배수의 합과 차 (2) | 2021.09.08 |