▶reduce() 함수 & ▶fill() & 전개연산자(...)를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag [i]가 true라면 X의 뒤에 arr [i]를 arr [i] × 2 번 추가하고, flag [i]가 false라면 X에서 마지막 arr [i] 개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 = flag의 길이 ≤ 100
- arr의 모든 원소는 1 이상 9 이하의 정수입니다.
- 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
입출력 예 & 설명
입출력 예 #1
- 예제 1번에서 X의 변화를 표로 나타내면 다음과 같습니다
- 따라서 [3, 3, 3, 3, 4, 4, 4, 4]를 return 합니다.
나의 풀이
return할 배열에서 flag배열의 요소가 true일 경우에는 해당요소를 해당 arr배열의 인덱스 요소 * 2 만큼 뒤에 추가해줘야 하고, false일 경우에는 해당 요소를 해당 요소만큼 삭제해야 하는 문제입니다.
코드 해석을 하자면 arr배열의 길이만큼 반복하는 for문을 사용했고, 그 후 flag의 요소가 true일 경우에는 Array()를 사용하여 배열을 만들어줍니다. 이 때 인자 값으로는 배열의 길이가 들어가는 데 이 길이를 arr배열의 해당 인덱스 요소 *2 만큼 만들어 줍니다. 더불어 fill() 함수를 사용하여 arr [i]의 요소를 넣어주었습니다.
그 후 전개 연산자(...)를 사용하여 값을 한 번에 전개해 줍니다.
flag가 false일 경우에는 slice() 함수를 사용하여 arr [i]의 요소를 사용해야 하는 데 ▶fill() 포스팅에서 알아보았던 것처럼 - 연산자를 사용하여 뒤에 요소만 삭제를 해줍니다.
마지막으로 push() 함수를 사용하여 빈 배열 a에 값을 넣어주어 마무리했습니다.
다른 풀이
다른 풀이에서는 reduce() 함수를 사용했습니다.
기본적인 구조는 "나의 풀이"와 비슷하지만 reduce()를 사용하여 누적값을 리턴해주었습니다.
"나의 풀이"에서 설명했던 if문을 삼항연자를 사용하여 처리해 주었습니다.
이번 문제에서 가장 중요한 첫 번째 포인트는 Array()를 사용하여 배열을 원하는 길이만큼 생성하주는 것이고, 두 번째 포인트는 전개연산자(...)를 사용하여 배열을 한 번에 전개해 준 것이고, 마지막 포인트는 slice() 함수를 사용하여 배열을 삭제해 준 것입니다.
ㄷㅇㅇㅇㅇ
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열이 몇 번 등장하는지 세기 (JavaScript) (1) | 2024.02.07 |
---|---|
[프로그래머스] 수열과 구간 쿼리3 (JavaScript) (0) | 2024.02.06 |
[프로그래머스] 글자 지우기 (JavaScript) (0) | 2024.01.31 |
[프로그래머스] 날짜 비교하기 (JavaScript) (1) | 2024.01.29 |
[프로그래머스] 등차수열의 특정한 항만 더하기 (JavaScript) (1) | 2024.01.28 |