나만의 작은 도서관
문제 77484. 로또의 최고 순위와 최저 순위 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77484
난이도 : Lv.1
문제 요약 설명
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.
순위 | 당첨내용 |
1 | 6개 일치 |
2 | 5개 일치 |
3 | 4개 일치 |
4 | 3개 일치 |
5 | 2개 일치 |
6 | 낙첨 |
6개의 당첨번호 중 일부 번호를 알 수 없을 때(0으로 표기), 최저 순위와 최고 순위를 출력하는 프로그램을 작성하시오.
입력
- 로또 번호를 담은 배열 lottos와 당첨 번호를 담은 배열 win_nums이 주어집니다.
입력 제한
- lottos는 길이가 6인 정수 배열이며, 1이상 45이하의 서로다른 정수와 0이 저장되어 있다.
- lottos는 정렬을 보장하지 않는다.
- win_nums는 길이가 6인 정수 배열이며, 1이상 45이하의 서로다른 정수가 저장되어 있다.
- win_nums는 정렬을 보장하지 않는다.
입력 예제
// input
[44, 1, 0, 0, 31, 25] // lottos
[31, 10, 45, 1, 6, 19] // win_nums
// ans
[3, 5]
풀이 방식
lottos배열에 포함된 숫자가 0이거나 0이 아닌 경우로 구분해서 다음과 같이 실행한다.
- 로또 번호가 0인경우: 0의 개수를 저장하는 zero_n을 1 증가시킨다.
- 로또 번호가 0이 아닌 경우: 해당 번호가 win_nums에 존재하는 지 찾고, 적중했다면 적중 횟수를 저장하는 cnt를 1 증가시킨다.
로또 번호는 각 번호가 서로 겹치지 않으니 최저 순위는 zero_n만큼 빗나가고 최고 순위는 zero_n만큼 적중했다고 결정할 수 있다.
최종적으로, zero_n + cnt의 값이 적중 횟수가 되며, 이에 따른 결과를 출력한다.
정답 코드
더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
vector<bool> visited(6);
int cnt = 0;
int zero_n = 0;
for(int elem : lottos){
if(elem == 0){
zero_n++;
continue;
}
if(find(win_nums.begin(), win_nums.end(), elem) != win_nums.end()) cnt++;
}
int min_rank = cnt >= 2 ? 7 - cnt : 6;
int max_rank = (cnt + zero_n) >= 2 ? 7 - (cnt + zero_n) : 6;
answer = {max_rank, min_rank};
return answer;
}
'프로그래머스 문제풀이 > 코드카타' 카테고리의 다른 글
문제 140108 문자열 나누기 (0) | 2024.06.18 |
---|---|
문제 42862. 체육복 (0) | 2024.06.17 |
문제 131128. 숫자 짝꿍 (0) | 2024.06.16 |
문제 133499. 옹알이 (2) (1) | 2024.06.15 |
문제 42840. 모의고사 (0) | 2024.06.10 |