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() 메소드

배열을 하나의 값으로 줄이고, 그 값을 반환한다.