Algorithm Problem Solving/Programmers

[프로그래머스] 폰켓몬, 실패율

코코자장자장 2021. 11. 30. 11:24

안녕하세요! 오늘은 폰켓몬과 실패율 두 문제를 풀어보았습니다!

나날이 벡터 사용법에 익숙해지고 있는듯하네요! ㅎㅎ

 

폰켓몬은 문제자체가 간단하죠? 등장한 종(부여된 숫자)과 size/2중 작은거 고르면 되는 문제였습니다!

 

실패율은 쪼오오오끔 어려웠는데요! map, pair, sort쓸줄 알면 쉽게 풀수 있는 문제였습니다!(이상하게 해쉬관련은 문제푸는데 오래걸리더라구요 ㅠㅠ 아직 구력이 부족한가 봅니다 ㅠㅠ)

 

음 cmp를 주석과같이 람다식으로 해도 되는데 보기좋게 함수로 했습니다!

 

레벨1 문제는 알고리즘을 잘 알고 있다기 보다는 역시 그냥 stl잘쓰느냐 문제가 더 많은듯 합니다!

 

iterator가 안익숙하시면(익숙해지길 바래요!) for문 주석 쳐놓은 부분처럼 쓰셔도 무관합니다!

 

그리고 int 연산해서 double로 바뀌는 부분 명시적 형변환 매우 중요합니다! 이거 웹에서 하느라 디버깅이 안되서 고생좀 했습니다 ㅠㅠㅠ


#include <vector>
using namespace std;

int solution(vector<int> nums)
{
    int answer = 0;
    int isKind[200001] = {0,};
    int size = nums.size();
    int res = 0;
    for (int i = 0; i < size; i++){
        if (isKind[nums[i]] == 0) {
            isKind[nums[i]] = 1;
            res++;
        }
    }
    answer = (size/2 < res) ? size/2 : res;
    return answer;
}
#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

bool cmp(const pair<int,double>& a, const pair<int,double>& b) {
	if (a.second == b.second) return a.first < b.first; // index는 오름차순
	return a.second > b.second; // 실패율은 내림차순
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    map<int,double> failureRate;
    vector<int> challenger(N+2, 0);
    vector<int> stage(N+2, 0);
    
    int size = stages.size();
    for(int i = 0; i < size; i++) {
        stage[stages[i]]++;
        for(int j = 1; j <= stages[i]; j++) {
            challenger[j]++;
        }
    }
    
    for(int i = 1; i <= N; i++) {
        if(challenger[i] == 0) failureRate[i] = 0;
        else failureRate[i] = (double)((double)stage[i])/((double)challenger[i]);
    }
    
    vector<pair<int, double>> v(failureRate.begin(), failureRate.end());
    sort(v.begin(), v.end(), cmp);
    //sort(v.begin(), v.end(), [](pair<int, double> a, pair<int, double> b) {
	//  if (a.second == b.second) return a.first < b.first; // index는 오름차순
	//  return a.second > b.second; // 실패율은 내림차순
    //});
    
    for (pair<int, double> it : v) answer.push_back(it.first); 
    //size = v.size();
    //for(int i = 0; i < size; i++) {
        //answer.push_back(v[i].first);
    //}
    
    return answer;
}