๊ฐ์ฅ ํฐ ์
๋ฌธ์
๋ฌธ์ ์ค๋ช
0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด ์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ ์๊ฐ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด์ค ๊ฐ์ฅ ํฐ ์๋ 6210์ ๋๋ค.
0 ๋๋ ์์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- numbers์ ๊ธธ์ด๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
- numbers์ ์์๋ 0 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- ์ ๋ต์ด ๋๋ฌด ํด ์ ์์ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์
numbers | return |
---|---|
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
์ฝ๋
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void swap(vector<int>& arr, int idx1, int idx2) {
int tmp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = tmp;
}
bool compareModule(int a, int b){
int num1 = stoi(to_string(a).append(to_string(b)));
int num2 = stoi(to_string(b).append(to_string(a)));
if(num1>num2)
return true; // ํ์ฌ ์์๊ฐ ๋ง์
else
return false; // ํ์ฌ ์์๊ฐ ํ๋ฆผ
}
void quickSortModule(vector<int>& arr, int left, int right) {
// quickSort๋ก ์๊ฐ๋ณต์ก๋ ์ค์ด๊ธฐ
if (right - left <= 1)
return;
int pivot = arr[left];
int high = left+1;
int low = right-1;
while (1) { // n => 10^5
while(high<right){
if (compareModule(pivot, arr[high])) //10^3
break;
else
high++;
}
while(low>left){
if (compareModule(arr[low], pivot))
break;
else
low--;
}
if (high >= low)
break;
swap(arr, high, low);
}
swap(arr, left, low);
quickSortModule(arr, left, low);
quickSortModule(arr, low + 1, right);
}
string solution(vector<int> numbers) {
string answer = "";
quickSortModule(numbers, 0, numbers.size()); //nlgn
int flag = 0; // ์์ 0 ์ง์์ฃผ๊ธฐ
for(int i=0; i<numbers.size(); i++){
if(flag==0 && numbers[i]==0)
continue;
else
flag=1;
answer+=to_string(numbers[i]);
}
if(answer=="") // ๋ต์ด 0์ผ ๊ฒฝ์ฐ
answer="0";
return answer;
}
ํ์ด
์ฃผ์ด์ง ๋ฐฐ์ด์ ํต ์ ๋ ฌ๋ก ์ ๋ ฌํ๋, ๋น๊ต๋ฅผ ๋จ์ํ ์์ ๋์๋ก ํ์ง ์๊ณ ๋ฐ๋ก ๋น๊ต ๋ชจ๋์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค. ๋น๊ต ๋ชจ๋์ ๋ ์๋ฅผ ์ด์ด๋ถ์์ ๋, ๋ ํฐ ์๊ฐ ๋์ค๋๋ก ๋ ์์ ํ์ฌ ์๋์ ์์น๊ฐ ๋ฐ๋ฅธ ์ง๋ฅผ ๋ฐํํด์ค๋ค.
์๋ฅผ ๋ค์ด 3๊ณผ 30์ด ์์ ๋, ๊ทธ๋๋ก ์ด์ด๋ถ์ด๋ฉด 330์ด๊ณ 30์ ์์ผ๋ก ํด์ ์ด์ด๋ถ์ด๋ฉด 303์ด๋ค. 330>303 ์ด๋ฏ๋ก ํ์ฌ ์์น๊ฐ ์ฌ๋ฐ๋ฅด๋ค. ๋ฐ๋ผ์ true ๋ฐํํ๋ ์์ด๋ค.
quickSort๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ์ฒ์์ ์ฝ์ ์ ๋ ฌ๋ก ๊ตฌํํ์๋ค๊ฐ n^2์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ๊นจ๋ซ๊ณ n์ด 10^5์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ ์ ์๊ฒ ๋ค๊ณ ํ๋จํ์๊ธฐ ๋๋ฌธ์ด๋ค.
void insertionSort(vector<int>& arr){
// ์ฝ์
์ ๋ ฌ
for(int i=1; i<arr.size(); i++){
int pos=i;
while(pos>0){
if(compareModule(arr[pos-1],arr[i]))
break;
--pos;
}
int tmp = arr[i];
arr.erase(arr.begin()+i); // ๊ธฐ์กด ์์ ์ง์ฐ๊ธฐ
arr.insert(arr.begin()+pos, tmp); // ์ ์ ํ ์์น์ ๋ผ์๋ฃ๊ธฐ
}
}
์ค๊ฐ์ ๋ ์๋ฅผ ์ด์ด๋ถ์ด๋ ๊ณผ์ ์ ์ด๋ ต๊ฒ ํด์ํด์ ๋ ์์ ์๋ฆฟ์๋ฅผ ๋ง์ถฐ์ค ์ ์์ ์์ ํฐ ์์ ์์๋ฆฌ๋ฅผ ๋ถ์ด๋ ์์ผ๋ก ํด์ ๋น๊ตํด๋ณด๊ธฐ๋ ํ๊ณ ,
bool compareModule(int a, int b){
if(a<b)
return !compareModule(b,a);
int sub = returnLength(a)-returnLength(b); // ์๋ฆฟ์ ์ฐจ์ด
for(int i=0; i<sub; i++){
b*=10;
}
b+=((int)(a/pow(10,returnLength(a)-sub))); // b์ ์์๋ฆฌ ๋ค์ ๋ถ์ฌ์ฃผ๊ธฐ
if(a<=b)
return false;
else
return true;
}
ex_) 4, 495 => 400 + 49(495์ ์์๋ฆฌ) , 495 => 449 , 495 ๋น๊ต
๋ ์๋ฅผ ๊ทธ๋ฅ ์ด์ด๋ถ์ด๋๋ฐ ๋ฌธ์์ด์ ์ฌ์ฉํ ๊ฒ์ด ์๋๋ผ ์์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ๋น๊ตํด๋ณด๊ธฐ๋ ํ๊ณ ,
bool compareModule(int a, int b){
int a_len = returnLength(a);
int b_len = returnLength(b);
int num1 = (a*pow(10,b_len))+b;
int num2 = (b*pow(10,a_len))+a;
if(num1>num2)
return true; // ํ์ฌ ์์๊ฐ ๋ง์
else
return false; // ํ์ฌ ์์๊ฐ ํ๋ฆผ
}
ex_) 4, 495 => 4000 + 495, 4950 + 4
๊ฒฐ๊ตญ to_string (int => string) ๊ณผ stoi (string => int)๋ผ๋ ํจ์๋ฅผ ์จ์ ํด๊ฒฐํ๋ค.
์ฑ์ ๊ฒฐ๊ณผ
๋ค๋ฅธ ์ฌ๋์ ํ์ด
bool compare(const string &a, const string &b)
{
if (b + a < a + b)
return true;
return false;
}
string solution(vector<int> numbers) {
string answer = "";
vector<string> strings;
for (int i : numbers)
strings.push_back(to_string(i));
sort(strings.begin(), strings.end(), compare);
for (auto iter = strings.begin(); iter < strings.end(); ++iter)
answer += *iter;
if (answer[0] == '0')
answer = "0";
return answer;
}
์์ฝ๋ฉ ๋ง์ธ...!
- sort๋ ๋น๊ต ํจ์๋ฅผ ์ค์ ๊ตฌํํ ์ ์๋ค.
- compare ํจ์๋ ์๋ ํ๋ณํ์ ์ด์ฉํด์ ์ ๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.
- 0์ฒ๋ฆฌ๋ ์ฝ๊ฒ ํ ์ ์๋ค => ์์๋ฆฌ๊ฐ 0์ด๋ฉด ๋ท์๋ฆฌ๋ค์ ๋ชจ๋ 0์ด๋ผ๊ณ ๋ณผ ์ ์์
Comment