반응형
📄 [탐욕법] 가장 큰 수 C++ Source Code
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_V 10
#define STRING_VECTOR vector<string>
#define TO_INDEX(X) X - '0'
/* ※ CAPTION ※
자릿수가 다른 숫자가 주어질 경우에는 (6, 10) 이면 6 + 10 = 610 / 10 + 6 = 106 의 값으로 비교한다. (A + B < B + A의 형태)
C++에서 String은 아스키코드 값을 통해서 비교한다. 그러므로 610 > 106의 값을 비교한다.
*/
const bool compare(const string & first, const string & second) {
return first + second > second + first ? true : false;
}
string solution(vector<int> numbers) {
vector<STRING_VECTOR> bucket = vector<STRING_VECTOR>(MAX_V);
// MARK: - Processing One Decimal Digit.
for (const auto value : numbers) {
const string number = std::to_string(value);
bucket[TO_INDEX(number.front())].push_back(number);
}
// MARK: - Sorting
for (auto & value : bucket) { std::sort(value.begin(), value.end(), compare); }
// MARK: - Concat Digit.
string answer = string();
for (int ii = bucket.size() - 1; ii >= 0; ii--) {
for (const auto value : bucket[ii]) { answer += value; }
}
if (std::atoi(answer.c_str()) == 0) { return "0"; }
return answer;
}
📄 [탐욕법] 가장 큰 수 Swift Source Code
import Foundation
func solution(_ numbers:[Int]) -> String {
var numbersString = numbers.compactMap({ String($0) })
numbersString.sort { $0 + $1 > $1 + $0 }
var answer = String()
for item in numbersString {
answer.append(contentsOf: item)
}
return answer.first! == "0" ? "0" : answer
}
🚀 REFERENCE
반응형
'# 사용하지 않는 게시글 > 알고리즘 문제' 카테고리의 다른 글
[BOJ - 2529번] 부등호 (0) | 2019.05.04 |
---|---|
[프로그래머스 - DP] N으로 표현 (0) | 2019.04.25 |
[프로그래머스 - 탐욕법] 큰 수 만들기 (0) | 2019.04.21 |
[프로그래머스 - 완전탐색] 소수 찾기 (0) | 2019.04.15 |
[프로그래머스 - 탐색] 타겟 넘버 (0) | 2019.04.14 |
댓글