Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

혼종 꼬지마루

[프로그래머스] (2018)KAKAO BLIND - 실패율 본문

Algorithms/SIMULATION

[프로그래머스] (2018)KAKAO BLIND - 실패율

꼬지마루 2018. 11. 11. 18:53

이 문제도 똑같이 구현을 잘 해줄 수 있느냐의 문제


입력받은 데이터는 이렇게 구성되어있다.


N : 게임 스테이지의 갯수

stages : 순서대로 각 유저가 몇번 스테이지에 있는지


입력받고 개인적으로 편하게 구현하기 위해 구조체 배열을 선언해서 만들었다


각 유저가 도달해 있는 stage 바로 앞까지는 해당 유저가 clear한 stage 이므로 check배열을 만들어서 그 스테이지를 끝낸 것으로 간주하고,


구조체 배열에는 그 스테이지에 머물러 있는 사람의 갯수를 넣어준다.


그리고 나서 단순히 for문을 돌면서 나눠주면 끝.


이 때 주의해야할 점이 모든 유저가 stage를 clear한 경우 그 실패한 유저가 0이므로 그대로 나눠주면 runtime error가 난다


이 문제는 단순히 if문 하나로 예외처리 해주면 끝


계산 후 정렬후에 answer에 담아주면 끝!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
struct USER {
    double rate;
    int sg;
}arr[200003];
 
bool com(const USER i, const USER j)
{
    return (i.rate > j.rate) || (i.rate == j.rate && i.sg < j.sg);
}
 
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    int len = stages.size();
    int check[502= { };
 
    for (int i = 0; i < len; i++)
    {
        for (int j = 1; j <= stages[i]; j++)
            check[j]++;
        arr[stages[i]].rate++; arr[stages[i]].sg = stages[i];
    }
    for (int i = 1; i <= N; i++)
    {
        arr[i].sg = i;
        if (!check[i]) arr[i].rate = 0;
        else arr[i].rate /= check[i];
    }
    sort(arr + 1, arr + (N + 1), com);
    for (int i = 1; i <= N; i++)
        answer.push_back(arr[i].sg);
    return answer;
}
cs

'Algorithms > SIMULATION' 카테고리의 다른 글

[백준] 13337 - 트럭  (0) 2019.04.12
[백준] 17135 - 캐슬 디펜스  (0) 2019.04.07
[프로그래머스] (2018)KAKAO BLIND - 오픈채팅방  (0) 2018.11.09
[백준] 16235 - 나무 재태크  (0) 2018.11.08
[SWEA] 5650 - 핀볼 게임  (0) 2018.09.21