정답 코드
https://rolypolytoy.tistory.com/48
- cnt[stages[i]]++; 각 스테이지 실패한 사람들 수를 이렇게 입력할 수가 있네
- stage에서 실패한 사람이 없다/있다로 if-else문 간략하게 작성할 수 있고.
- mo -= cnt[i]; // 해당 단계에서 실패했다는 것은 다음단계도 못했다는 의미이기 때문에 전체 수에서 빼준다. 여기도 중요하다!
if-else를 깔끔하게 나누지 못해 틀린 문제.
카카오 2019 블라인드 채용 기출이지만 기출 중에선 비교적 쉬운 편으로 보이니
잘 복습해두자
내 코드 (오답)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<float, int>> failR; //실패율과 각 스테이지의 번호
int k=1; //각 스테이지 변수
int bunmo=0; //스테이지에 도달한 플레이어 수
int bunja=0; //스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
long fail;
for (int i=0; i<stages.size(); i++)
{
if (stages[i]>=k) //스테이지에 도달한 플레이어들
{
bunmo++; //실패율의 분모
}
else if (bunmo==0) //스테이지에 도달한 유저가 없는 경우
{
fail=0;
k++;
continue;
}
if (stages[i]==k){ //스테이지에 도달했으나 스테이지를 깨지 못함
bunja++; //실패율의 분자
}
else{
fail= bunja/bunmo;
}
failR.push_back(make_pair(fail,stages[i]));
k++;
}
sort(failR.rbegin(),failR.rend()); //내림차순 정렬
for (int i=0; i<N; i++)
{
answer.push_back(failR[i].second);
}
return answer;
}
'CS > 알고리즘' 카테고리의 다른 글
[c++][프로그래머스] K번째 수 [성공] (0) | 2023.08.15 |
---|---|
[c++][프로그래머스] 바탕화면 정리 [실패] (0) | 2023.08.06 |
[c++][프로그래머스] 제일 작은 수 [성공] _ vector 특정 원소 지우기 (0) | 2023.08.05 |
[c++][프로그래머스] 푸드파이터 [성공] (0) | 2023.08.03 |
[c++] [프로그래머스]크기가 작은 문자열 [성공] (0) | 2023.08.02 |