프로그래머스 - 정렬(K번째 수, 가장 큰 수, H-Index)

업데이트:

문제 링크 - https://programmers.co.kr/learn/courses/30/parts/12198

👀문제이해 및 풀이방법

정렬을 사용한 문제
1번은 간단하지만 2번 3번은 간단하지만은 않았다.
2번은 코드를 보면 바로 알 수 있는데 00000을 0으로 표현해야했다. 난 반복문 돌면서 이전 값이 “0” 이면 걍 없애고 새로추가하는 방식으로 앞의 0을 없앴는데
맨앞에 큰수부터 온다는것을 고려했을 때 다 끝나고 맨앞이 0이면 걍 “0”으로 만들면 되는일이였다..
3번은 문제이해가 쉽지 않은데 그냥 정렬해서 index가 값보다 커지는 순간을 찾으면 된다

📝코드

1 K번째 수

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;

    for(int i=0; i<commands.size(); i++){
        vector<int> tmp(array.begin()+commands[i][0]-1,array.begin()+commands[i][1]);
        sort(tmp.begin(), tmp.end());
        answer.push_back(tmp[commands[i][2]-1]);
    }

    return answer;
}

2 가장 큰 수

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(string& a,string& b){
    return a+b == b+a ? a.length()<b.length() : a+b>b+a;
};
string solution(vector<int> numbers) {
    string answer = "";
    vector<string> num;
    for(int i=0;i<numbers.size();i++)
        num.push_back(to_string(numbers[i]));
    sort(num.begin(),num.end(),compare);
    for(int i=0;i<num.size();i++){
        if(answer=="0")
            answer.pop_back();
        answer+=num[i];
    }

    return answer;

}

3 H-Index

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(int& a,int& b){
    return a>b;
};
int solution(vector<int> citations) {
    sort(citations.begin(),citations.end(),compare);
    for(int i=0;i<citations.size();i++){
        if(i+1>citations[i])
            return i;            
    }
    return citations.size();
}

댓글남기기