728x90
반응형
문제 설명
해당 문제는 알아볼 수 없는 번호(0)를 포함한 로또 번호와 당첨 번호를 비교해 최고 순위와 최저 순위를 구하는 문제이다.
최고 순위: 0을 전부 당첨 번호라고 가정할 때의 일치 개수로 계산
최저 순위: 0을 전부 틀린 번호라고 가정할 때의 일치 개수로 계산
핵심 풀이 방법
0의 개수는 맞았다고 가정했을 때 최고 순위를 결정짓는 요소다.
실제로 맞은 번호는 win_nums에 존재하는 lottos 숫자 개수로 확인할 수 있다.
최고 순위는 (맞은 개수 + 0의 개수)로 계산하고,
최저 순위는 (맞은 개수)로 계산한다.
등수는 6개 맞으면 1등, 5개면 2등 ... 2개면 5등, 그 외는 6등이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> lottos, vector<int> win_nums) {
// 결과를 저장할 벡터를 7로 초기화 (7등은 없지만 나중에 보정할 때 사용)
vector<int> answer(2, 7);
// 0은 알아볼 수 없는 숫자이므로 최고 등수 계산 시 맞았다고 가정
for(int i : lottos)
{
if(i == 0)
{
answer[0]--; // 최고 등수 등급 하나 상승 (번호 하나 맞았다고 가정)
}
}
// 당첨 번호와 일치하는 번호를 찾아서 최고/최저 모두 순위 상승
for(int number : win_nums)
{
// 현재 번호가 lottos 안에 있는지 확인
if(find(lottos.begin(), lottos.end(), number) != lottos.end())
{
answer[0]--; // 최고 등수 등급 하나 상승
answer[1]--; // 최저 등수 등급 하나 상승
}
}
// 등수가 7이면 낙첨 처리 (6등으로 보정)
for(int& i : answer)
{
if(i == 7)
i = 6;
}
return answer;
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 실패율 (0) | 2025.04.17 |
---|---|
코딩테스트 : 신규 아이디 추천 (0) | 2025.04.17 |
코딩테스트 : 크레인 인형뽑기 게임 (0) | 2025.04.17 |
코딩테스트 : 체육복 (1) | 2025.04.17 |
코딩테스트 : 완주하지 못한 선수 (0) | 2025.04.17 |