-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsomeRecursive.ts
More file actions
30 lines (22 loc) · 1.27 KB
/
someRecursive.ts
File metadata and controls
30 lines (22 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Problem
// 배열과 콜백 함수를 받아 배열의 모든 원소가 콜백에 전달될 때 `true`를 반환하는 원소가 있는지 확인하는 `someRecursive` 함수를 작성하라.
// Input
// 배열 `array`, 배열 안 원소를 매개변수로 가지고 `boolean` 타입의 값을 반환하는 콜백 함수 `callback`
// Output
// 배열의 모든 원소를 콜백 함수에 전달하고 콜백 함수의 반환 값이 `true`인 원소가 한개라도 있다면 `true` 반환
// 콜백 함수의 반환 값이 `true`인 원소가 없다면 `false` 반환
// `array`의 길이가 0이라면 `false` 반환 (base case)
// `array`의 첫 번째 요소를 인자로 콜백 함수를 호출한 결과가 `true`라면 `true` 반환
// `array`의 첫 번째 요소를 인자로 콜백 함수를 호출한 결과가 `false`라면 첫 번째 요소를 제외한 배열로 함수를 재귀호출한 결과를 반환
type CallbackFn<T> = (element: T) => boolean;
type SomeRecursiveFn = <T>(array: T[], callback: CallbackFn<T>) => boolean;
const someRecursive: SomeRecursiveFn = (array, callback) => {
if (array.length === 0) {
return false;
}
if (callback(array[0])) {
return true;
}
return someRecursive(array.slice(1), callback);
};
export default someRecursive;