ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 전개연산자와 Math 함수 그리고 map과 find함수로 긴 문자열 뽑아봅자
    JS 알고리즘/기본문제 2023. 10. 5. 08:43
    😲 N개의 문자열이 입력되면 그 중 가장 긴 문자열을 출력하는 프로그램을 작성하세요.

     

    문제풀이 1 : 변수 설정하고 생각의 흐름대로 작성한 로직

    const longStr = (str) => {
      let max = 0
      let long = ''
      for(let x of str){
        if(max < x.length) {
        max = x.length  
        long = x
        }
      }
      return long
    }
    
    
    let str=["teacher", "time", "student", "beautiful", "good"];
    console.log(longStr(str));

    문제풀이 2 : sort함수를 활용해서 문제풀이

    const longStr = (str) => {
      str.sort((a,b)=> b.length - a.length)
      return str[0]
    }
    
    
    let str=["teacher", "time", "student", "beautiful", "good"];
    console.log(longStr(str));

    이 문제를 통해서 더 자세히 알게된 사실은 무작정 a,b만 한다고 sort는 작동하지 않는다. 숫자가 들어가야한다. 자바스크립트 작동방식이 약간(?) 이상하게 된다고 해서 문자열 빼는게 되지는 않는다. 오름차순 내림차순을 정렬하기 위해서는 무조건 숫자여야한다! 

     

    문제풀이 3 : reduce로 문제풀이

    const longStr = (str) => {
      return str.reduce((a,b) =>{
        return a.length > b.length ? a : b},'')
    }
    
    
    let str=["teacher", "time", "student", "beautiful", "good"];
    console.log(longStr(str));

    여기서 reduce도 더 배웠다!

    초기값의 길이가 누적값의 길이보다 크면 초기값이 참이고 누적값이 길면 누적값이 참이다. 그리고 초기값은 빈문자열이다. 

    여기서 나는 문자열도 되는구나 생각했다. reduce를 공부할땐 예시가 전부 숫자라서 숫자만 사용가능하구나 했지만 다른 방식으로 이용할 수 있었다. 

     

    🤔 그런데 어디에다가 이렇게 쓰지?

     

    문제풀이 4 : 전개연산자와 Math 함수 그리고 map과 find함수..

    const longStr = (str) => {
      let long = Math.max(...str.map((data) => data.length ))
      return str.find((string) => string.length == long )
    }
    
    
    let str=["teacher", "time", "student", "beautiful", "good"];
    console.log(longStr(str));

    진짜 총집합이다. 이렇게까지 해야해? 라는 생각도 들었지만 이 하나로 이 함수들과 더 가까워진 느낌

     

    약간의 풀이를 더하자면

    ...(전개연산자)로 열어주고 map으로 한번 다 돌리면서 Math.max로 가장 큰 수를 빼온다.

    그리고 find로 string으로 요소로 정해주고 string의 길이를 구한 다음 Math함수로 구해온 수와 비교해주면 된다.

     

leechi's blog