-
전개연산자와 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함수로 구해온 수와 비교해주면 된다.
'JS 알고리즘 > 기본문제' 카테고리의 다른 글
기본문제 알고리즘 문법 총정리 (0) 2023.10.09 filter와 indexOf 함수 조합! filter의 두번째 파라미터는 index! (0) 2023.10.08 IndexOf로 중복된 문자 제거하기. (0) 2023.10.07