문제
https://school.programmers.co.kr/learn/courses/30/lessons/181860
풀이
조건을 정리해보자
1. flag[i] 값이 true면 arr[i]을 arr[i]*2번 추가
2. flag[i] 값이 false라면 마지막 arr[i]개의 원소를 제거
arr 배열을 돌면서 플래그 값을 검사해 플래그 값이 true인 경우에는, arr[i]의 두배한 수만큼 arr[i]를 추가해준다.
반대로 false인 경우에는 splice를 이용해 잘라내어준다. (slice는 원본을 그대로 유지한채 새 배열을 반환하기때매 사용 불가)
합치는 방법을 고민했는데,, fill을 알고있다면 간단히 해결할 수 있는 문제였다.
function solution(arr, flag) {
const X = [];
arr.forEach((x, i) => {
flag[i] ? X.push(...Array(x * 2).fill(x)) : X.splice(-x);
});
return X;
}
다른 풀이
reduce를 이용한 방법. true인 경우 조건에 맞게 추가하고, false인 경우 마지막 배열에서 num만큼 제거한 값을 새로 지정한다.
function solution(arr, flag) {
return arr.reduce(
(prev, num, i) =>
flag[i]
? [...prev, ...new Array(num * 2).fill(num)]
: prev.slice(0, -num),
[]
);
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 2차원으로 만들기 (0) | 2024.01.14 |
---|---|
프로그래머스, 자바스크립트) 가까운 수 (1) | 2024.01.11 |
프로그래머스, 자바스크립트) 세 개의 구분자 (1) | 2024.01.11 |
프로그래머스, 자바스크립트) 문자열 뒤집기 (0) | 2024.01.11 |
프로그래머스, 자바스크립트) 배열 만들기 5 (0) | 2024.01.11 |