프로그래머스 - 정렬(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();
}
댓글남기기