[기수 이동] TIL 5일차

MINGYOUNG KIM·2021년 2월 25일
0

3. coplit 고차함수 '30_findShortestWord 문제'

1) 해당 문제를 직접 풀고, 자신의 코드와 레퍼런스 코드를 비교하여 한 줄씩(line by line)으로 설명하되,
2) 이 때, Urclass 고차함수에서 배웠던 배열의 내장 메소드를 사용해야 하고,
3) 사용한 메소드의 작동 방식에 대해서 구체적으로 설명하기

[문제]
배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴해야 합니다.
[입력]
인자 1 : arr
임의의 요소가 담긴 배열
[출력]
string 타입을 리턴해야 합니다.
[주의 사항]
반복문(for, while) 사용은 금지됩니다.
같은 길이의 요소가 있다면 배열의 앞쪽에 있는 요소를 리턴해야 합니다.
배열에는 문자열 외에 다른 요소들이 있을 수 있습니다.
빈 배열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
주어진 배열에 문자열이 없는 경우, 빈 문자열을 리턴해야 합니다.
[예시]
let output = findShortestWord([4, 'two', 2, 'three']);
console.log(output); // --> 'two'
[힌트]
문제를 한 번에 해결하지 말고, 나누어 봅니다.
문자열로만 구성된 배열을 입력받은 경우, 문제가 더 쉬워진다는 것에 주목합시다.

1) 30_findShortestWord 레퍼런스 코드

function findShortestWord(arr) {
const onlyStrings = arr.filter(function (el) {
return typeof el === 'string';
});
if (onlyStrings.length === 0) {
return '';
}
return onlyStrings.reduce(function (acc, cur) {
if (acc.length <= cur.length) {
return acc;
} else {
return cur;
}
});
}

1-1) 나의 코드
  • 배열에서 가장 짦은 길이를 가진 '문자열 요소'를 리턴
  • 반복문(for, while) 사용은 금지
    // 수도 코드
  1. 배열을 입력 받았을 때 문자열의 길이를 확인
  2. 길이가 0 이면 빈 배열을 리턴
  3. 길이가 0이 아니면 해당 배열에 문자열 요소가 있는지 확인
  4. 문자열 요소가 없으면 빈 배열을 리턴
  5. 문자열 요소가 있으면 해당 요소와 같은 길이의 요소가 있는지 확인
  6. 같은 길이의 요소가 있으면 배열의 앞에 오는 요소를 리턴
if (arr.length === 0) {
return ''
 }

let filteredString = arr.filter(function (el){
if(typeof el === 'string')
return el;
})
return filteredString.reduce(function (acc,cur){
if (acc.length <= cur.length) {
return acc
} else {
return cur;
}
})
}

** 마지막 테스트 케이스에서 [ [1, 2, 4]을(를) 입력받은 경우, 빈 문자열을 리턴해야 합니다] 통과 X

profile
개발자가 되기 위해 준비 중인 사람

0개의 댓글