Prob A
by ipark
HTML
<h2>
Prob A.
</h2>
<ul> 입력
<li> ABABAC </li>
<li> DONTFORGETTHATYOUARESPECIAL </li>
</ul>
<ul> 생성 결과
<li> Expected: <span id="extected1">CBBAAA</span>, Actual: <span id="actual1"></span> </li>
<li> Expected: <span id="extected1">CDFGHILNPSUYRRAAAEEEOOOTTTT</span>, Actual: <span id="actual2"></span> </li>
</ul>
<ul> 결과
<li> Case1: <span id="result1"></span> </li>
<li> Case2: <span id="result2"></span> </li>
</ul>
JavaScript
//-------------------------------------------------
// Utility Fn
//
function hit(dict, key) {
return !!dict[key];
}
function splat(dict, key) {
dict[key] = (hit(dict, key)) ? dict[key] + 1 : 1;
}
function times(char, n) {
return Array(n + 1).join(char);
}
//-------------------------------------------------
// Business Logic
//
function process(dict, data) {
var result = [];
for (var i = 0, len = data.length; i < len; i++) {
splat(dict, data[i]);
}
for (var key in dict) {
if (dict.hasOwnProperty(key)) {
var str = times(key, dict[key]);
result.push(str);
}
}
return result.sort(comparer).join('');
}
// less than 0 -> a, b
// equals 0 -> unchanged
// greater than 0 -> b, a
function comparer(l, r) {
if (l.length !== r.length) {
return l.length > r.length;
}
return (l > r) ? 1 : -1;
}
//-------------------------------------------------
// Main Fn
//
var inputs = ['ABABAC', 'DONTFORGETTHATYOUARESPECIAL'];
var expected = ['CBBAAA', 'CDFGHILNPSUYRRAAAEEEOOOTTTT'];
(function init(inputs) {
var result = [];
for (var i = 0, len = inputs.length; i < len; i++) {
result.push(process({}, inputs[i]));
$('#actual' + (i + 1)).text(result[i]);
$('#result' + (i + 1)).text(expected[i] === result[i]);
}
})(inputs);