Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/프로그래머스

    [프로그래머스] 실패율

    2021. 6. 1.

    by. Hyeon-Uk

    반응형

    https://programmers.co.kr/learn/courses/30/lessons/42889

     

    코딩테스트 연습 - 실패율

    실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

    programmers.co.kr


     

    -풀이-

    1. 먼저 각 스테이지당 몇명이 도달했지만 클리어 하지 못했는지 구한다.

     

    2. vector<pair<double,int>> v를 선언한다. double=실패율, int=층수

     

    3. 1층~N층까지 층을 돌며, 해당 층의 실패율을 구한다.

     

    만약 해당 층을 클리어하지 못한사람이 없으면 {0,층수}를 푸쉬해주고,

    있다면, {클리어하지 못한사람/사람의 수, 층수} 를 push 해준뒤, 다음 층의 실패율을 위해 사람의 수에서 클리어하지 못한사람의 수를 빼준다.

     

    EX) 전체사람수=8, 1층을 클리어하지 못한사람 = 1명 이라면, 1층의 실패율은 1/8 이 될것이다. 다음 층부터는 1층을 클리어하지 못한사람을 고려하지 않아야 하므로, 사람의 수를 8-1=7로 갱신해준다.

     

    4. 그런뒤 v를 정렬한다. 1순위로는 실패율값을 기준으로 내림차순 정렬하고, 2순위로는 층수를 기준으로 오름차순 정렬을 해준다.

     

    5. v에 저장되어있는 층수를 순차적으로 answer에 넣어준다.

     

    -시간복잡도-

    스테이지의 개수를 N, stages벡터의 길이를 M이라고 한다면, 1번을 동작시킬때 O(M) , 3번을 동작시킬땐 O(N), 정렬은 O(NlogN), 마지막으로 5번은 O(N)시간이 걸린다. N은 1~500, M=1~200000 이므로, 최종 시간복잡도는 O(M)이 된다.

     

    -코드-

     

    #include <iostream>
    #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>> v;
        int people=stages.size();
        int stay[200001]={0};
        for(int i:stages){
            stay[i]++;
        }
        
        for(int i=1;i<=N;i++){
            if(!stay[i]){
                v.push_back({0,i});
            }
            else{
                v.push_back({(double)stay[i]/people,i});
                people-=stay[i];
            }
        }
        sort(v.begin(),v.end(),compare);
        for(auto i:v){
            answer.push_back(i.second);
        }
        return answer;
    }
    반응형
    저작자표시 (새창열림)

    '문제풀이 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 소수 만들기  (0) 2021.06.07
    [프로그래머스] [1차]다트 게임  (0) 2021.06.04
    [프로그래머스] 예산  (0) 2021.05.31
    [프로그래머스] 폰켓몬  (0) 2021.05.31
    [프로그래머스] 키패드 누르기  (0) 2021.05.29

    댓글

    관련글

    • [프로그래머스] 소수 만들기 2021.06.07
    • [프로그래머스] [1차]다트 게임 2021.06.04
    • [프로그래머스] 예산 2021.05.31
    • [프로그래머스] 폰켓몬 2021.05.31
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바