*문제 출처는 프로그래머스에 있습니다.
문제 제목: 실패율 (1단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/42889
문제 설명
나의 풀이
// 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 가도록 한다.
bool cmp(pair<double, int>& a, pair<double, int>& b) {
if (a.first == b.first) return a.second < b.second;
return a.first > b.first;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// <스테이지 실패율, 스테이지 번호>를 저장하는 pair, vector이다.
vector<pair<double, int>> hard;
// 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
double noClear = 0;
// 플레이어 수에서 noClear를 빼는 용도이다.
int noReach = 0;
for (int i = 1; i <= N; i++) {
// count는 stages 배열에 숫자 1부터 N까지 개수를 반환한다.
noClear = count(stages.begin(), stages.end(), i);
// 만약 스테이지에 도달한 유저가 없는 경우 실패율은 0이된다.
if (stages.size() == noReach) {
hard.push_back({ 0, i });
continue;
}
// 스테이지 실패율을 계산해서 배열에 저장한다.
hard.push_back({ noClear / (double)(stages.size() - noReach), i });
// 남은 인원 조사
noReach += noClear;
}
// 실패율을 내림차순으로 정렬 cmp는 위 함수이다.
sort(hard.begin(), hard.end(), cmp);
// 실패율 순으로 스테이지를 answer에 저장한다.
for (int j = 0; j < hard.size(); j++)
answer.push_back(hard[j].second);
return answer;
}
※ 알아야 할 것
count 메서드는 배열 안에 있는 특정 문자의 개수를 반환해준다.
pair는 클래스는 사용자가 지정한 두 타입의 데이터를 입력 받아서 사용합니다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 달리기 경주 / C++ (0) | 2024.02.01 |
---|---|
Programmers / 최빈값 구하기 / C++ (0) | 2024.01.31 |
Programmers / 유한소수 판별하기 / C++ (0) | 2024.01.30 |
Programmers / 소수 찾기 / C++ (0) | 2024.01.29 |
Programmers / [1차] 비밀지도 / C++ (0) | 2024.01.25 |