Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열에서 가장 짧은 단어와 가장 긴 단어 찾는 방법

이번 튜토리얼에서는 문자열을 입력받아 해당 문자열에서 가장 짧은 단어가장 긴 단어를 각각 배열 형태로 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

예를 들어, 다음과 같은 문자열이 있다고 가정해 봅시다.

const str = "Hardships often prepare ordinary people for an extraordinary destiny";

이 문자열에서 각 단어의 길이를 비교하면, 가장 짧은 단어는 'an'(2글자)이고 가장 긴 단어는 'extraordinary'(13글자)입니다.

따라서 함수의 출력 결과는 다음과 같아야 합니다.

const output = ["an", "extraordinary"];

해결 방법

이 문제는 다음과 같은 순서로 해결할 수 있습니다.

  1. split(" ") 메서드를 사용해 문자열을 공백 기준으로 분리하여 단어 배열을 만듭니다.
  2. 배열의 첫 번째 단어를 최솟값(min)과 최댓값(max)의 초기값으로 설정합니다.
  3. 반복문을 돌며 각 단어의 길이를 비교하여 더 짧은 단어와 더 긴 단어를 갱신합니다.
  4. 최종적으로 [min, max] 형태의 배열을 반환합니다.

코드 구현

위 로직을 실제 코드로 구현하면 다음과 같습니다.

const str = "Hardships often prepare ordinary people for an extraordinary destiny";

const largestSmallest = str => {
    const strArr = str.split(" ");
    let min = strArr[0];
    let max = strArr[0];
    
    for(let i = 1; i < strArr.length; i++){
        if(strArr[i].length < min.length){
            min = strArr[i];
        }
        if(strArr[i].length > max.length){
            max = strArr[i];
        }
    }
    
    return [min, max];
};

console.log(largestSmallest(str));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

[ 'an', 'extraordinary' ]

추가 팁: reduce() 메서드 활용하기

같은 기능을 reduce() 메서드를 사용해 더 간결하게 구현할 수도 있습니다.

const largestSmallest = str => {
    const words = str.split(" ");
    const min = words.reduce((a, b) => b.length < a.length ? b : a);
    const max = words.reduce((a, b) => b.length > a.length ? b : a);
    return [min, max];
};

두 방법 모두 시간 복잡도는 O(n)으로 동일하지만, reduce()를 사용하면 코드가 더 선언적이고 읽기 쉬워진다는 장점이 있습니다. 상황에 맞게 적절한 방법을 선택하시면 됩니다.