findLongest.js (7kyu 40)
Codewars 알고리즘 풀이
Problem
- Find the number with the most digit.
- 가장 긴 숫자를 반환한다.
- If two numbers in the argument array have the same number of digits, return the first one in the array.
- 두 숫자의 길이가 같은 경우, 첫 번째 숫자를 반환한다.
Solution 01
function findLongest(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
newArr.push(arr[i].toString().length);
}
let maxLength = Math.max(...newArr);
let maxItems = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i].toString().length === maxLength) {
maxItems.push(arr[i]);
}
}
return maxItems[0];
}
findLongest([1, 10, 100, 200]); // 100
findLongest([200, 4000, 8000]); // 4000
Solution 02
function findLongest(arr) {
let longest = '0';
for (let i = 0; i < arr.length; i++) {
let str = arr[i].toString();
if (longest.length < str.length) {
longest = str;
}
}
return parseInt(longest);
}
findLongest([1, 10, 100, 200]); // 100
findLongest([200, 4000, 8000]); // 4000
toString()
메소드숫자를 문자열로 변환한다.
parseInt()
메소드문자열을 구문 분석하고, 정수를 반환한다.
Solution 03
function findLongest(arr) {
let newArr = arr.map(i => i.toString());
newArr.sort((a, b) => b.length - a.length);
return parseInt(newArr[0]);
}
findLongest([1, 10, 100, 200]); // 100
findLongest([200, 4000, 8000]); // 4000
map()
메소드배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새로운 배열을 반환한다.
sort()
메소드배열의 element를 정렬한 후, 그 배열을 반환한다.
Solution 04
function findLongest(arr) {
return arr.sort((a, b) => (b + '').length - (a + '').length)[0];
}
findLongest([1, 10, 100, 200]); // 100
findLongest([200, 4000, 8000]); // 4000
Solution 05
function findLongest(arr) {
return arr.reduce((result, i) => (result + '').length < (i + '').length ? i : result);
}
findLongest([1, 10, 100, 200]); // 100
findLongest([200, 4000, 8000]); // 4000
reduce()
메소드배열을 하나의 값으로 줄이고, 그 값을 반환한다.