[プログラマー]最大数(C++)
📌 リファレンス
引き渡しアルゴリズム研究に関わる問題は19週目からBellogに記録される(18週前に復習してアップロードする予定)🤗) 他の個人が回答した基準やプログラマの質問は、自分が意味があると思っている部分だけをフィルタリングしてBellogに記録します.Bellogにアップロードされていない他の質問やコードを知りたい場合は、次のGithubでさらに確認できます.👀 ご来店ありがとうございます🙏
💚 github | dianstar/Algorithm-BOJ
💚 github | dianestar/Algorithm-Programmers
最大数|問題のショートカット
最初は簡単に順番を使って解けばいい!でもタイムアウト...
ソートは、実際には可能な限り数値を作成して確認します.
非常に非効率...言える💧
でも順番論理を復習するのは久しぶりで有意義な時間(?)
次のコードにコメントするのが惜しいものがあります.
⭕もちろんC++アルゴリズムヘッダに含まれるnext置換でシーケンスを求めることもできます
タイムアウトの問題を解決できません.
Googleを通じて、他の人のコードを参考にして修正しました.
👉 カスタムcmp関数を作成することで、ソート基準としてsortに入れる方法が見つかりました.
cmp関数の場合、2つの文字列を比較します.
2つのstringをつなぐ2つの方法の中で、もっと大きく戻せばいいのです
numbers要素の0は最大の数値(+numbersの長さは2より大きい). numbersの長さは100000より大きい. numersの要素は1000を超えません. このような条件により、答えは「00」「000」と同じ異常値(?)これは値かもしれないからです.
答え=「0」答えの値を適切に変える
引き渡しアルゴリズム研究に関わる問題は19週目からBellogに記録される(18週前に復習してアップロードする予定)🤗) 他の個人が回答した基準やプログラマの質問は、自分が意味があると思っている部分だけをフィルタリングしてBellogに記録します.Bellogにアップロードされていない他の質問やコードを知りたい場合は、次のGithubでさらに確認できます.👀 ご来店ありがとうございます🙏
💚 github | dianstar/Algorithm-BOJ
💚 github | dianestar/Algorithm-Programmers
エンコードテスト高得点Kit>ソート
最大数|問題のショートカット
解答(2022年1月21日FRI)💻)
🤔 チャット+🚨 うっかり
最初は簡単に順番を使って解けばいい!でもタイムアウト...
ソートは、実際には可能な限り数値を作成して確認します.
非常に非効率...言える💧
でも順番論理を復習するのは久しぶりで有意義な時間(?)
次のコードにコメントするのが惜しいものがあります.
⭕もちろんC++アルゴリズムヘッダに含まれるnext置換でシーケンスを求めることもできます
解の核心
タイムアウトの問題を解決できません.
Googleを通じて、他の人のコードを参考にして修正しました.
👉 カスタムcmp関数を作成することで、ソート基準としてsortに入れる方法が見つかりました.
cmp関数の場合、2つの文字列を比較します.
2つのstringをつなぐ2つの方法の中で、もっと大きく戻せばいいのです
ex) string "7"과 string "31"을 이어붙이는 경우,
"7"+"31" = "731"</span> 이 "31" + "7" = "317" 보다 크므로 "731"이 반환된다
👉 注意すべき点は、文字列型の数字を比較することです.numbers要素の0は最大の数値(+numbersの長さは2より大きい).
答え=「0」答えの値を適切に変える
ex) vector<int> numbers = { 0, 0, 0 } 일 경우 answer가 "000"이 될 수 있음
🔽 コード(C+)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const string &x, const string &y) {
return x+y > y+x;
}
string solution(vector<int> numbers) {
string answer = "";
int N = numbers.size();
// string으로 변환
vector<string> strings;
for (int i=0; i<N; i++) {
strings.push_back(to_string(numbers[i]));
}
// 정렬 (cmp 함수 : 숫자 두 개씩 이어붙인 값 비교)
sort(strings.begin(), strings.end(), cmp);
// 정렬한 순서대로 숫자 이어붙여서 answer 값 구하기
for (int i=0; i<N; i++) {
answer += strings[i];
}
// 주어진 numbers에서 가장 큰 값이 0인 경우 answer = '0' 처리
if (answer[0] == '0') {
answer = '0';
}
return answer;
}
/* cf) permutation 활용 시 시간 초과
vector<string> candidates;
void permutation(vector<string> strings, int depth, int n) {
if (depth == n) {
string s = "";
for (int i=0; i<n; i++) {
s += strings[i];
}
candidates.push_back(s);
}
else {
for (int i=depth; i<n; i++) {
swap(strings[depth], strings[i]);
permutation(strings, depth+1, n);
swap(strings[depth], strings[i]);
}
}
}
string solution(vector<int> numbers) {
string answer = "";
vector<string> strings;
int N = numbers.size();
for (int i=0; i<N; i++) {
strings.push_back(to_string(numbers[i]));
}
permutation(strings, 0, N);
sort(candidates.begin(), candidates.end(), greater<>());
answer = candidates[0];
return answer;
}
********************************/
Reference
この問題について([プログラマー]最大数(C++)), 我々は、より多くの情報をここで見つけました https://velog.io/@dianestar/프로그래머스-가장큰수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol