혼종 꼬지마루
[프로그래머스] (2018)KAKAO BLIND - 실패율 본문
이 문제도 똑같이 구현을 잘 해줄 수 있느냐의 문제
입력받은 데이터는 이렇게 구성되어있다.
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] = { 0 }; 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 |