プログラマの最大数
11309 ワード
問題の説明
0または正の整数を指定すると、最大の整数を見つけます.
例えば、与えられた整数が[6,10,2]である場合、最大数が6210である[610261010621026102106]を作成することができる.
パラメータに指定された配列番号が0または正の整数の場合、作成可能な最大番号を文字列に変換して戻すソリューション関数を作成します.
せいげんじょうけん
numbersの長さは1または10万以下です.
numbersの要素は1000を超えない.
答えが大きすぎるかもしれませんが、文字列に置き換えて返してください.
に答える
最初の接近は桁数の異なる2つの数字の関係から始まった.例えば、3と34があれば、34は3の前にあるはずで、桁数を調整する作業が行われています.最大桁数は4桁なので、1桁~4桁の最小公倍数12桁を指定し、数字を繰り返し入力することで大きさを比較します.
n1 = 3 -> 333333333333
n2 = 34 -> 343434343434
결과: n1 > n2
実は初めて3桁の最小公倍数6桁を比較し、1000の存在により誤処理され、4桁を含む最小公倍数12桁となった.
入力された入力が0の場合、出力は0になるはずですが、得られません.この部分は別に変更された.
実際に計算した値は大雑把に書かれているので,コードが非常に無邪気になるのは欠点である.
コード#コード#
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int n1, int n2){
long long t1, t2;
if(n1 == 1000) t1 = 100000;
else if(n1 / 100 >= 1) t1 = (n1 * 1000) + n1;
else if(n1 / 10 >= 1) t1 = (n1 * 10000) + (n1 * 100) + n1;
else t1 = (n1 * 100000) + (n1 * 10000) + (n1 * 1000) + (n1 * 100) + (n1 * 10) + n1;
if(n2 == 1000) t2 = 100000;
else if(n2 / 100 >= 1) t2 = (n2 * 1000) + n2;
else if(n2 / 10 >= 1) t2 = (n2 * 10000) + (n2 * 100) + n2;
else t2 = (n2 * 100000) + (n2 * 10000) + (n2 * 1000) + (n2 * 100) + (n2 * 10) + n2;
t1 = (t1 * 1000000) + t1;
t2 = (t2 * 1000000) + t2;
return t1 > t2;
}
string solution(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end(), cmp);
for(int i = 0; i < numbers.size(); i++){
answer += to_string(numbers[i]);
}
if(answer[0] == '0') answer = "0";
return answer;
}
ソース
[プログラマー]https://programmers.co.kr/learn/challenges
間違った説明や改善点があれば教えてください.ありがとうございます.
Reference
この問題について(プログラマの最大数), 我々は、より多くの情報をここで見つけました https://velog.io/@ko-inseoklee/프로그래머스-가장-큰-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol