<프로그래머스 C++> 로또의 최고순위와 최저순위
2026. 5. 13. 10:05ㆍProgrammers
문제 설명
로또 번호 일부가 0으로 지워진 상태에서, 당첨 가능한 최고 순위와 최저 순위를 구하는 문제이다.
- 0은 어떤 번호든 될 수 있다.
- 0이 아닌 번호는 고정이다.
| 항목 | 예시1 | 예시2 | 예시3 |
| lottos | [44, 1, 0, 0, 31, 25] | [0, 0, 0, 0, 0, 0] | [45, 4, 35, 20, 3, 9] |
| win_nums | [31, 10, 45, 1, 6, 19] | [38, 19, 20, 40, 15, 25] | [20, 9, 3, 45, 4, 35] |
| result | [3, 5] | [1, 6] | [1, 1] |
문제 해석
최고 순위와 최저 순위를 구하기 위해서는 두 가지 정보가 필요하다.
- 확실히 맞힌 개수(count로 계산) : 0이 아닌 숫자 중에서 win_nums와 같은 번호
- 0의 개수(zero로 계산) : 최고 순위에선 전부 당첨으로 가정
결국
최고순위 = Count + zero
최저순위 = Count
이렇게 계산하면 구할 수 있게 된다.
문제 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
vector<int> answer;
vector<int> Rank = {6, 6, 5, 4, 3, 2, 1};
int count = 0, zero = 0;
// 0 개수 세기
for(int i = 0; i < lottos.size(); ++i)
if(lottos[i] == 0) ++zero;
// 당첨 번호 일치 개수 세기
for(int i = 0; i < lottos.size(); ++i)
if(lottos[i] != 0 &&
find(win_nums.begin(), win_nums.end(), lottos[i]) != win_nums.end())
++count;
answer.push_back(Rank[count + zero]); // 최고 순위
answer.push_back(Rank[count]); // 최저 순위
return answer;
}
핵심 포인트
1. Rank 배열로 일치 개수 >> 순위 변환
vector<int> Rank = {6, 6, 5, 4, 3, 2, 1};
// 인덱스: 0 1 2 3 4 5 6
인덱스가 일치한 번호의 개수이고, 값을 순위로 따진다.
| 항목 | 0개 | 1개 | 2개 | 3개 | 4개 | 5개 | 6개 |
| 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| 순위 | 6 | 6 | 5 | 4 | 3 | 2 | 1 |
0개와 1개 일치는 둘 다 6등이기 때문에 인덱스 0, 1은 둘 다 6등으로 설정했다.
count + zero가 최대 6까지 나오기 때문에 배열크기를 7개로 잡아야 범위를 벗어나지 않는다.
2. find로 win_nums 안을 확인
find(win_nums.begin(), win_nums.end(), lottos[i]) != win_nums.end()
트러블 슈팅
Rank 배열 범위
처음엔 Rank배열을 이렇게 설정했다.
vector<int> Rank = {6, 5, 4, 3, 2, 1}; // 크기 6
이렇게 하니까 count+zero가 최대 6이기때문에 Rank[6]에 접근하면 범위를 벗어나서 오류가 발생했다.
또 1개를 맞았을 경우엔 5등이 출력되어 오류가 발생했다.
그래서 0개를 맞았을 때, 1개를 맞았을 때 모두 6등으로 리턴되어야 하기 때문에 배열의 앞 부분에 6을 추가했다.
vector<int> Rank = {6, 6, 5, 4, 3, 2, 1}; //크기 7'Programmers' 카테고리의 다른 글
| <프로그래머스 C++> 두 수의 짝꿍 풀이 (0) | 2026.05.15 |
|---|---|
| <프로그래머스 C++> 옹알이(2) 풀이 (0) | 2026.05.14 |
| < 프로그래머스 C++ > 페인트 칠하기 (0) | 2026.05.11 |
| < 프로그래머스 C++ > 소수 만들기 (1) | 2026.05.08 |
| < 프로그래머스 C++ > 모의고사 (0) | 2026.05.07 |