[c++] ํ๋ก๊ทธ๋๋จธ์ค - [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ(Level 2)
๋ฌธ์
์ฝ๋ฉํ ์คํธ ์ฐ์ต - [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ
ํ์ผ๋ช ์ ๋ ฌ ์ธ ์ฐจ๋ก์ ์ฝ๋ฉ ํ ์คํธ์ ๋ ์ฐจ๋ก์ ๋ฉด์ ์ด๋ผ๋ ๊ธฐ๋๊ธด ๋ธ๋ผ์ธ๋ ๊ณต์ฑ๋ฅผ ๋ฌด์ฌํ ํต๊ณผํด ์นด์นด์ค์ ์ ์ฌํ ๋ฌด์ง๋ ํ์ผ ์ ์ฅ์ ์๋ฒ ๊ด๋ฆฌ๋ฅผ ๋งก๊ฒ ๋์๋ค. ์ ์ฅ์ ์๋ฒ์๋ ํ๋ก๊ทธ๋จ
programmers.co.kr
์ฝ๋
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
//22:13 ~ 22:50
using namespace std;
struct Detail{
string head;
int num;
string origin;
};
vector<string> answer;
bool cmp(const Detail& d1, const Detail& d2){
if(d1.head!=d2.head) return d1.head<d2.head;
else if(d1.num!=d2.num) return d1.num<d2.num;
return false;
}
Detail divide(string s){
string head,num,temp;
Detail detail;
for(int i=0; i<s.length(); i++){
if(!isdigit(s[i])&&num.empty()) temp+=s[i];
else{
if(head.empty()){
head = temp;
temp.clear();
num+=s[i];
}
else num+=s[i];
}
}
detail.head = head;
detail.num = stoi(num);
detail.origin = s;
return detail;
}
vector<string> solution(vector<string> files) {
vector<Detail> v;
for(string file:files) v.push_back(divide(file));
for(int i=0; i<v.size(); i++) transform(v[i].head.begin(), v[i].head.end(), v[i].head.begin(),::tolower);
stable_sort(v.begin(),v.end(),cmp); // ์ฌ๊ธฐ ๊ทธ๋ฅ sortํ๋ฉด ํ๋ฆผ!!
for(int i=0; i<v.size(); i++) answer.push_back(v[i].origin);
return answer;
}
int main(){
solution({"O00321", "O49qcGPHuRLR5FEfoO00321"});
for(int i=0; i<answer.size(); i++){
cout<<answer[i]<<'\n';
}
}
ํ์ด(37๋ถ)
์ด ๋ฌธ์ ๋ฅผ ํตํด์ c++์ stable_sort์ sort์ ์ฐจ์ด์ ๋ํด์ ์๊ฒ ๋์์ต๋๋ค. ๋ถ๋ช ์๋ฒฝํ๊ฒ ๊ตฌํํ๋๋ฐ ๊ณ์ ์ค๋ต์ด ๋จ๊ธธ๋ ์ง๋ฌธ ๋ชฉ๋ก์ ์ฐพ์๋ณด๋ c++์ ์ฌ์ฉํ๋ ์ฌ๋์ sort๋ฅผ stable_sort๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ํด๊ฒฐ์ด ๋๋ค๊ณ ํด์ ๋ฐ๊ฟจ๋๋ฐ ๋ฐ๋ก ์ ๋ต์ด ๋ด์ต๋๋ค.
sort์ stable_sort
์ต๊ทผ sort์ stable_sort๋ฅผ ์จ๋ณผ์ผ์ด ์์ด์ ํฌ์คํ ํด๋ด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก sort ์๊ณ ๋ฆฌ์ฆ์ ์์ฃผ ์ฐ๋๋ฐ, stable_sort ๋ผ๋ ๊ฒ๋ ์๋๊ตฐ์. MSDN์ ๋์์๋ stable_sort์ ํน์ง์ผ๋ก๋ ์๋์ ๊ฐ์ต๋๋ค. ๋ณต์ก๋
gamedevforever.com
์ผ๋ฐ์ ์ผ๋ก ์๋ ๊ฐ์ ๊ฒฝ์ฐ๋ sort๊ฐ ๋ ๋น ๋ฅด์ง๋ง ๋์ผํ ์ฐ์ ์์์ ํํด์๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค๊ณ ํฉ๋๋ค. ๋ฐ๋ฉด์ stable_sort๋ ๋์ผํ ์ฐ์ ์์์ผ ๋ ์์๋ฅผ ๋ณด์ฅํด์ค๋ค๊ณ ํฉ๋๋ค.