문자열을 입력받아 그 안에서 가장 짧은 단어를 찾아 반환하는 JavaScript 함수를 작성해야 합니다.
문제 이해하기
예를 들어, 입력 문자열이 다음과 같다고 가정해 보겠습니다 −
const str = 'This is a sample string';
이 문자열에서 가장 짧은 단어는 "a"(길이 1)이므로, 기대하는 출력 결과는 다음과 같습니다 −
const output = 'a';
해결 접근 방법
이 문제는 다음 단계를 거쳐 해결할 수 있습니다:
split(' ')메서드로 문자열을 공백 기준으로 분리하여 단어 배열을 만듭니다.reduce()메서드로 배열을 순회하면서 지금까지 발견한 가장 짧은 단어의 길이와 단어 자체를 계속 누적합니다.- 현재 단어가 누적된 최소 길이보다 짧으면 길이와 단어를 새로운 값으로 갱신합니다.
- 순회가 끝나면 최종적으로 저장된 단어를 반환합니다.
구현 코드
위 접근 방식을 실제로 구현한 코드는 다음과 같습니다 −
const str = 'This is a sample string';
const findSmallest = str => {
const strArr = str.split(' ');
const creds = strArr.reduce((acc, val) => {
let { length, word } = acc;
if(val.length < length){
length = val.length;
word = val;
};
return { length, word };
}, {
length: Infinity,
word: ''
});
return creds.word;
};
console.log(findSmallest(str));코드 상세 설명
split(' '): 문자열을 공백을 기준으로 나누어['This', 'is', 'a', 'sample', 'string']형태의 배열을 생성합니다.reduce(): 초기값으로{ length: Infinity, word: '' }를 설정합니다.Infinity를 사용하면 어떤 단어든 첫 번째 비교에서 무조건 더 짧게 처리되므로 안전한 시작점이 됩니다.- 각 순회마다 현재 단어의 길이가 누적된 최소 길이보다 작으면
length와word값을 교체합니다. - 모든 단어를 확인한 후에는 최종적으로 저장된 가장 짧은 단어를 반환합니다.
이 방식은 반복문 없이 함수형 프로그래밍 스타일로 깔끔하게 문제를 해결할 수 있다는 장점이 있습니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
a