


입출력 예시를 보면 쉽게 이해할 수 있는 문제이다. 이런 구현 문제는 항상 모든 조건을 만족하도록 코드를 짜야한다.
(스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0으로 정의한다 -> 이 부분을 정의하지 않아서 한 번에 통과하지 못했다.)
ex) N = 5, stages = [2, 1, 2, 1, 2]일 경우 3, 4, 5 스테이지로 간 사람이 없기 때문에 스테이지의 실패율이 모두 0이 된다.
코드
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
|
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
map<int, int> m;
bool comp(pair<int, double> a, pair<int, double> b)
{
if (a.second == b.second)
return a.first < b.first;
else
return a.second > b.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<int, double> > v;
int total = stages.size();
for(int i=0; i<stages.size(); i++)
m[stages[i]]++;
for(int i=1; i<=N; i++)
{
if (total == 0)
v.push_back(make_pair(i, 0));
else
v.push_back(make_pair(i, m[i] / (double)total));
total = total - m[i];
}
sort(v.begin(), v.end(), comp);
for(int i=0; i<v.size(); i++)
answer.push_back(v[i].first);
return answer;
}
|
cs |
위의 코드는 N번의 반복문을 돌면서 total의 수에서 각 스테이지에 위치하는 사람을 계속해서 빼주었는데, 만약 위의 예시처럼
[2, 1, 2, 1, 2]의 경우에는 total이 이미 0인 상태이므로 v 배열에 0 / 0을 push_back하게 되어 에러가 발생한다.
따라서 만약 total이 이미 0이 된 경우에는 해당 스테이지 index와 실패율을 0으로 고정한 뒤 push_back해주면 쉽게 해결된다.
v vector를 다 구성한 뒤 실패율이 높은 순으로 sort해준 뒤 우리가 반환하려는 answer vector에다가 넣어주면 통과한다.
'Study > Programmers' 카테고리의 다른 글
프로그래머스 - 수식 최대화(2020 카카오 인턴십) (0) | 2021.05.05 |
---|---|
프로그래머스 - 단체사진 찍기(2017 카카오코드 본선) (0) | 2021.05.04 |
프로그래머스 - 키패드 누르기(2020 카카오 인턴십) (0) | 2021.05.04 |
프로그래머스 - 오픈채팅방(2019 KAKAO BLIND RECRUITMENT) (0) | 2021.05.03 |
프로그래머스 - 징검다리 건너기(2019 카카오 개발자 겨울 인턴십) (0) | 2021.05.01 |