코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (115)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (9)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • 솔라나
  • 밸리데이터
  • grafana
  • Hooks #React
  • 모니터링
  • Immer #ContextAPI

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

[C++] 프로그래머스 - 실패율 (pair, sort - bool)
[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 프로그래머스 - 실패율 (pair, sort - bool)

2021. 7. 18. 20:44
728x90

슈퍼개발자...부럽다

내 풀이

  1. stages에 실패한 스테이지들이 적혀있다. 1스테이지에서 실패한 사람은 2스테이지부터는 도달하지 못한 것.
    → challenged(스테이지 도달 플레이어 수) 변수는 전체 사용자 수에서 시작해서 누적으로 뺐다.
    → failed(실패한 플레이어 수) 변수는 0으로 두고 매 스테이지마다 초기화하면서 셌다.
  2. failure_rate(실패율)은 벡터에 실패율(double)과 스테이지(int)를 각각 key, value로 담았다.
  3. 실패율이 같을 때는 스테이지의 오름차순으로 정렬하고, 나머지는 내림차순으로 정렬하게 bool로 정해줬다.
  4. 해당 스테이지에 도달한 플레이어 수가 0일 때는 0으로 나눌 수 없으므로, 예외처리해서 failure_rate에 직접 0을 넣어줘야 했다.
pair를 새롭게 써보면서 여러 방면으로 응용할 수 있음과, sort에서 bool 함수로 정렬을 조정할 수 있음을 알았다.

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(pair<double, int>& a, pair<double, int>& b) {
    if (a.first == b.first) return a.second < b.second;
    else return a.first > b.first;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<pair<double, int>> failure_rate;
    int challenged = stages.size();
    for (int i = 0; i < N; i++) {
        int failed = 0;
        for (int j = 0; j < stages.size(); j++) {
            if (stages[j] == i) challenged--;
            if (stages[j] == i + 1) failed++;
        }
        if (challenged == 0) {
            failure_rate.push_back({ 0, i+1 });
        }
        else {
            failure_rate.push_back({ double(failed) / double(challenged), i+1 });
        }
    }
    sort(failure_rate.begin(), failure_rate.end(), compare);

    for (int i = 0; i < failure_rate.size(); i++) {
        answer.push_back(failure_rate[i].second);
    }

    return answer;
}

 

 

 

1단계 치고 어렵다 했더니... 점수를 많이 줬다^.^

이제 1단계 첫페이지 끝!

'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글

[C++] 프로그래머스 - 비밀지도  (0) 2021.07.21
[C++] 프로그래머스 - 3진법 뒤집기  (0) 2021.07.18
[C++] 프로그래머스 - 숫자 문자열과 영단어  (0) 2021.07.16
[C++] 프로그래머스 - 약수의 개수와 덧셈  (0) 2021.07.14
[C++] 프로그래머스 - 로또의 최고 순위와 최저 순위  (0) 2021.07.13
    '[C_C++]코딩테스트 연습/[프로그래머스] level 1' 카테고리의 다른 글
    • [C++] 프로그래머스 - 비밀지도
    • [C++] 프로그래머스 - 3진법 뒤집기
    • [C++] 프로그래머스 - 숫자 문자열과 영단어
    • [C++] 프로그래머스 - 약수의 개수와 덧셈
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바