문제 5. 배열과 숫자를 인수로 받아, 입력된 인수 숫자 이후의 배열을 카피하는 copyLast라는 함수를 작성해라.
copyLast(['Ironman', 'Thor', 'Captain', 'Black Widow', 'Hulk'], 2)
// ["Captain", "Black Widow", "Hulk"]
풀이 전 생각)
새로운 배열을 만들어야 한다.
인수로 받은 숫자부터 인수로 받은 배열 끝까지의 인덱스를 새로운 배열에 복사하면 된다.
push 기능을 활용한다.
풀이)
const copyLast = (arr, num, result = [], i = num) => {
if (arr.length <= i) {
return result
}
result.push(arr[i])
return copyLast(arr, num, result, i + 1)
}
- i의 크기는 num으로 맞춰준다.
- length보다 i의 크기가 크거나 같으면 결과를 출력한다.
- 그렇지 않다면 push(arr[i)를 통해 새로운 배열에 요소를 추가한다.
- 재귀한다.
답지 풀이)
const copyLast = (a, b, result = [], i = 0) => {
if (i >= a.length) {
return result
}
if (i >= b) {
result.push(a[i])
}
return copyLast(a, b, result, i + 1)
}
내 생각)
- 답지의 풀이에서는 i를 0으로 할당하되, i가 b보다 크거나 같을 경우 배열에 push하는 기능을 구현했다.
- 이러한 답도 할 수 있구나 라고 생각했다.
문제 6. 배열과 숫자를 인수로 받아, 입력된 숫자 만큼 뒤의 요소들을 생략해서 카피하는 배열을 생성하는 copyFirst 함수를 작성해라.
copyFirst(['Ironman', 'Thor', 'Captain', 'Black Widow', 'Hulk'], 2)
// ["Ironman", "Thor", "Captain"]
풀이 전 생각)
- 인덱스를 순회할 파라미터 i를 만든다.
- 배열도 새로이 만들어야 한다.
- 배열.length - 숫자의 값과 i의 값이 같아지면 배열을 출력한다.
풀이)
const copyFirst = (arr, num, result = [], i = 0) => {
if (arr.length - num <= i) {
return result
}
result.push(arr[i])
return copyFirst(arr, num, result, i + 1)
}
- num만큼 뒤의 인덱스를 입력하지 않는것을 고려하여 return을 작성한다.
- push를 통해 결과 배열을 만들어주고, 재귀함수를 이용해 함수를 다시 시작한다.
문제 7. 배열과 함수를 인자로 받아 배열의 모든 요소에 대해 함수를 호출하는 runOnEach 함수를 작성해라.
runOnEach([1, 2, 3, 4, 5], (e, i) => {
// notice the input function has 2 parameters
return e + i
}) // returns [1, 3, 5, 7, 9]
풀이 전 생각)
- 일단 문제 자체가 이해하기 상당히 난해했다.
- 함수의 구조를 어떻게 짤 지 고려했다.
- runOnEach = (배열, 함수) => {} 식으로 짜되, 테스트케이스에서 무한반복할 마음을 먹었다.
풀이)
const runOnEach = (arr, f, result = [], i = 0) => {
if (arr.length === i) return result
result.push(f(arr[i], i))
return runOnEach(arr, f, result, i + 1)
}
- 배열과 함수를 인자로 받음을 기억해라.
- 배열의 길이만큼 i가 증가하고, i가 배열의 길이와 같아질 경우 배열을 출력한다.
- 배열 result에는 인자로 받은 함수의 리턴값이 push된다.
- 함수의 주요 골격을 직접짜되, 답지를 보고 수정했다.
- 문제가 잘 이해가지 않아 풀기가 난해했으나,
- 인수로 받는 함수의 return값이 push에 들어가야 한다는 사고는 스스로 할 수 있었다.
- 다음에 한번 더 풀어봄직한 배열 관련 문제이다.
문제 8. 2차원 배열과 숫자를 인수로 받는 onlyIndex 함수를 작성해라. 해당 함수는 각 배열에서 입력된 숫자 인덱스를 배열화하여 출력한다. 아래 예시를 보자.
onlyIndex(
[
[1, 2, 3, 4, 5],
[6, 9, 8, 7, 6],
[4, 5, 6, 6, 7],
[0, 1, 2, 3, 9]
],
2
) // returns [ 3, 8, 6, 2 ]
풀이 전 생각)
- 첫 번째 배열은 i 파라미터를 만들어 선택하고, 배열 내부의 인덱스는 입력받은 숫자를 통해 접근한다.
const onlyIndex = (arr, num, result = [], i = 0) => {
if (arr.length <= i) return result
if (num >= arr[0].length) return result
result.push(arr[i][num])
return onlyIndex(arr, num, result, i + 1)
}
풀이)
- i가 배열 길이와 크거나 같아진다면 결과 배열을 출력한다.
- 입력받는 숫자가 배열의 길이보다 크거나 같다면 (입력받는 수가 인덱스를 초과한다면) 빈 배열을 출력한다.
(이 처리를 하지 않을 경우, 쓰레기값이 나온다.) - result에 배열의 좌표를 push하여 배열을 만들고, 재귀시킨다.
'Javascript' 카테고리의 다른 글
배열 복사하기 (map과 [...arr] ) (0) | 2022.08.12 |
---|---|
Map과 Map의 내부 작동 원리 (0) | 2022.08.12 |
배열 관련 문제 풀이 (1) (0) | 2022.08.12 |
Splice() (0) | 2022.08.11 |
unshift() (0) | 2022.08.11 |