이번 포스트에서는 문장을 담고 있는 문자열을 첫 번째이자 유일한 인수로 전달받아, 해당 문자열 안에서 두 번째로 짧은 단어의 길이를 반환하는 자바스크립트 함수를 만들어 보겠습니다.
문제 이해하기
예를 들어, 입력으로 주어진 문자열이 다음과 같다고 가정해 봅시다.
const str = 'This is a sample string';
각 단어의 길이는 'This'(4), 'is'(2), 'a'(1), 'sample'(6), 'string'(6)입니다. 이 중 가장 짧은 단어는 'a'(길이 1)이고, 그다음으로 짧은 단어는 'is'이므로 함수가 반환해야 할 값은 2입니다.
해결 접근 방식
이 문제는 다음과 같은 순서로 해결할 수 있습니다.
1. 문자열을 공백을 기준으로 분리하여 단어 배열을 만듭니다.
2. 단어가 두 개 미만이라면 두 번째로 짧은 단어가 존재하지 않으므로 false를 반환합니다.
3. 각 단어를 해당 단어의 길이 값으로 변환합니다.
4. 배열을 오름차순으로 정렬합니다.
5. 정렬된 배열의 두 번째 요소(인덱스 1)를 반환합니다.
코드 구현
const str = 'This is a sample string';
const secondSmallest = str => {
const strArr = str.split(' ');
if(strArr.length < 2){
return false;
}
for(let i = 0; i < strArr.length; i++){
strArr[i] = strArr[i].length;
};
strArr.sort((a, b) => a - b);
return strArr[1];
};
console.log(secondSmallest(str));코드 동작 설명
위 코드에서 split(' ') 메서드는 문자열을 공백 기준으로 나누어 단어 배열을 생성합니다. 이후 반복문을 통해 각 단어를 length 속성으로 길이 숫자로 바꾼 뒤, sort((a, b) => a - b)를 사용해 오름차순으로 정렬합니다. 여기서 비교 함수를 반드시 지정해야 하는데, 그렇지 않으면 배열이 문자열 기준으로 정렬되어 잘못된 결과가 나올 수 있습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
2
'This is a sample string'에서 가장 짧은 단어는 'a'(길이 1)이고, 두 번째로 짧은 단어는 'is'(길이 2)이기 때문에 올바르게 2가 출력됩니다.