문제
그램(G), 킬로그램(KG), 톤(T)이라는 세 가지 단위로 표현된 무게 값이 담긴 문자열 배열을 입력받아, 가벼운 것부터 무거운 것 순서대로 정렬하는 JavaScript 함수를 작성해야 합니다.
핵심은 각 문자열에서 숫자 부분과 단위 부분을 분리한 뒤, 모든 값을 하나의 기준 단위(여기서는 킬로그램)로 환산하는 것입니다. 단위를 통일해야 서로 다른 단위 사이에서도 올바른 크기 비교가 가능하기 때문입니다.
예제
다음은 위 문제를 해결하는 코드입니다 −
const arr = ['1456G', '1KG', '.5T', '.005T', '78645G', '23KG'];
const arrangeWeights = (arr = []) => {
const sorted=(w)=>{
if(w.slice(-2) === 'KG'){
return +w.slice(0,-2) * 1;
}else if(w.slice(-1)==='T'){
return +w.slice(0, -1)*1000
}else{
return +w.slice(0, -1)*0.001;
};
};
return arr.sort((a, b) => sorted(a) - sorted(b));
};
console.log(arrangeWeights(arr));
코드 설명
sorted 헬퍼 함수는 개별 무게 문자열을 킬로그램 기준 수치로 변환합니다.
- 문자열 끝 두 글자가
KG라면 숫자 부분에 1을 곱합니다. - 끝 한 글자가
T라면 1000을 곱합니다. (1톤 = 1,000kg) - 그 외, 즉
G로 끝나는 경우에는 0.001을 곱합니다. (1g = 0.001kg)
이후 Array.prototype.sort() 메서드에 콜백 함수를 전달하여, 환산된 값의 차이를 기준으로 오름차순 정렬을 수행합니다. 원본 배열을 변경하지 않고 싶다면 [...arr].sort()처럼 복사본을 정렬하는 방법도 고려할 수 있습니다.
출력
콘솔 실행 결과는 다음과 같습니다 −
[ '1KG', '1456G', '.005T', '23KG', '78645G', '.5T' ]
결과를 확인해 보면 1KG(=1kg)이 가장 가볍고, .5T(=500kg)가 가장 무거운 것으로 올바르게 정렬된 것을 알 수 있습니다.