문제 링크:
코딩테스트 연습 - 실패율 | 프로그래머스
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를
programmers.co.kr
해설 링크:
2019 카카오 신입 공채 1차 코딩 테스트 문제 해설
작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데요. 지원자분들 만큼이나 준비위원들도 테스트가 문제없이, 공정하게 치러질 수 있도록 많은 준비를 했고 두근 거리는 마음으로 끝까지 온라인 테스트를 모니터링했답니다. 문제는 작년과 비슷하게 구현 문제 위주로 쉬운 난이도에서 어려운 […]
tech.kakao.com
코드:
/* 1. stage값끼리 곱하면 int의 범위를 벗어남 -> long long casting */
#include <vector>
#include <algorithm>
#include <functional>
#include <tuple>
#include <set>
#include <map>
using namespace std;
bool cmp(tuple<int, int, int> a, tuple<int, int, int> b) {
if ((long long)get<0>(a) * get<1>(b) == (long long)get<0>(b) * get<1>(a)) /* 1 */
return get<2>(a) < get<2>(b);
return (long long)get<0>(a) * get<1>(b) > (long long)get<0>(b) * get<1>(a); /* 1 */
}
vector<int> solution(int N, vector<int> stages) {
set<int> nv;
for (int n = 1; n <= N; ++n)
nv.emplace(n);
map<int, int, greater<int>> map;
for (auto stage : stages) {
auto it = map.find(stage);
if (it == map.end())
map[stage] = 1;
else
++((*it).second);
nv.erase(stage);
}
vector<tuple<int, int, int>> vct;
int acc = 0;
if ((*map.begin()).first == N + 1) {
acc = map[N + 1];
map.erase(N + 1);
}
for (auto p : map) {
acc += p.second;
vct.emplace_back(p.second, acc, p.first);
}
sort(vct.begin(), vct.end(), cmp);
vector<int> answer;
for(auto t : vct)
answer.push_back(get<2>(t));
for (auto i : nv)
answer.push_back(i);
return answer;
}