본문 바로가기
#알고리즘 [Algorithm]/Problem

[프로그래머스 - 탐욕법] 가장 큰 수

by cy_mos 2019. 4. 21.
반응형

[프로그래머스 - 탐욕법] 가장 큰 수


📄 [탐욕법] 가장 큰 수 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

반응형

댓글