[방법]
- 배열의 원소들을 순회하면서 가장 큰 자릿수를 구한다. 각 배열의 원소를 해당 크기의 자릿수만큼 늘리고, 자릿수가 변경되면서 생긴 자릿수 값은 해당 원소의 원본 값에서 가장 큰 자릿수의 값으로 할당한다. 예를 들어, 원소 41이 있고 가장 큰 자릿수가 3이라면 41을 414로 변경한다.
- 새로운 배열에 대해 내림차순으로 정렬하고, 같은 값을 가질 경우 원본 값에서 1의 자릿수 값을 비교하여 결정한다.
- 정렬된 배열의 원본 값을 순서대로 이어붙이면서 결과 값을 완성한다.
[테스트 케이스]
- 41과 414가 주어졌을 때, 41441이 나와야 한다.
- 89와 898이 주어졌을 때, 89898이 나와야 한다.
[소스코드]
function solution(numbers) {
let answer = '';
let maxLength = 1;
let sizeArr = [];
for(let number of numbers){
let cnt = 0;
while(number !== 0){
number = Math.floor(number / 10);
cnt++;
}
sizeArr.push(cnt);
if(cnt > maxLength) maxLength = cnt;
}
let arr = [];
for(let i=0;i<numbers.length;i++){
let diff = maxLength - sizeArr[i];
let number = numbers[i];
let data = {
key: number * Math.pow(10, diff),
value: number
};
let addValue = number;
while(true){
if(Math.floor(addValue / 10) === 0) break;
addValue = Math.floor(addValue / 10);
}
for(let j=0;j<diff;j++){
data.key += addValue * Math.pow(10, j);
}
arr.push(data);
}
arr.sort((a,b) => {
if(a.key === b.key){
return (b.value % 10) - (a.value % 10);
} else {
return b.key - a.key;
}
});
if(arr[0].value === 0){
return '0';
}
for(let item of arr){
answer += String(item.value);
}
return answer;
}
'컴퓨터 공학 > Algorithm' 카테고리의 다른 글
[디자인패턴] 빌더 패턴 (Builder Pattern) 예시 - 서브웨이 (0) | 2022.08.23 |
---|---|
백준 알고리즘 21738 얼음깨기 펭귄 C++ 코드 (0) | 2021.06.07 |
알고스팟 - 수강철회 (WITHDRAWAL) (0) | 2018.09.12 |
2-SAT (2-Satisfiability) (0) | 2018.09.12 |
알고스팟 - 변화하는 중간값 (RUNNINGMEDIAN) 설명 (0) | 2018.09.12 |