Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Level 3
- 그리디
- 부스트코스
- SWEA
- 백트래킹
- 백준
- next_permutation
- Level 2
- DFS
- Gold 5
- Web
- 구현
- Level 4
- 2020 카카오 인턴십
- 프로그래머스
- 코드리뷰
- 브루트포스
- 2019 KAKAO BLIND
- BFS
- 월간 코드 챌린지
- Gold 4
- c++
- pass
- level 1
- 시뮬레이션
- 코드 리뷰
- 스택/큐
- 2020 KAKAO BLIND
- DP
- 삼성 SW 역량 테스트
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][2019 KAKAO BLIND][C++] 실패율 본문
문제
프로그래머스 2019 KAKAO BLIND RECRUITMENT - 실패율 (Level 1)
문제 풀이
접근 방식
이 문제는 카카오 블라인드 공채 1차 코딩테스트 2번 문제로,
게임 이용자들이 현재 멈춰 있는 스테이지 번호를 통해 실패율을 구하는 문제였다.
우선, 주어진 스테이지 번호를 통해 각 스테이지에 머물러 있는 이용자들의 수를 구해 cnt 벡터에 저장해주었다.
그리고 스테이지 번호와 실패율을 저장할 result 벡터을 만들어주고,
cnt 벡터를 뒤에서 부터 탐색하며 다음과 같이 실패율을 구해주었다.
실패율 = (현재 스테이지에 머물러 있는 이용자의 수) / (지금까지 탐색한 스테이지의 이용자 수의 합)
이후, cmp 함수를 구현하여 result 벡터를 실패율이 높은 순으로 정렬해주었고,
정렬된 result 벡터의 스테이지 번호를 answer에 저장하여 답을 구해주었다.
풀이 코드 - C++
#include <vector>
#include <algorithm>
using namespace std;
bool cmp (pair<int, float> a, pair<int, float> b){
if(a.second == b.second) return a.first < b.first;
return a.second > b.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> cnt(N+1);
for(int s : stages) cnt[s - 1]++;
int sum = cnt[N];
vector<pair<int, float>> result(N);
for(int i = N - 1; i >= 0; i--) {
sum += cnt[i];
result[i].first = i + 1;
if(sum == 0) result[i].second = 0;
else result[i].second = (float) cnt[i] / sum;
}
vector<int> answer;
sort(result.begin(), result.end(), cmp);
for(auto r : result) answer.push_back(r.first);
return answer;
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2019 KAKAO BLIND][C++] 무지의 먹방 라이브 (0) | 2020.09.15 |
---|---|
[프로그래머스][2019 KAKAO BLIND][C++] 후보키 (0) | 2020.09.14 |
[프로그래머스][2019 KAKAO BLIND][C++] 오픈채팅방 (0) | 2020.09.12 |
[프로그래머스][2020 KAKAO BLIND][C++] 괄호 변환 (0) | 2020.09.11 |
[프로그래머스][2020 KAKAO BLIND][C++] 문자열 압축 (0) | 2020.09.10 |
Comments