저장을 습관화

프로그래머스 LV.0 배열 만들기 3 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 배열 만들기 3

ctrs 2023. 9. 21. 15:31

프로그래머스 LV.0 배열 만들기 3

https://school.programmers.co.kr/learn/courses/30/lessons/181895

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

배열 만들기 3


2. 문제 설명

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.

 

intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.

 

이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.


3. 제한 사항

- 1 ≤ arr의 길이 ≤ 100,000

- 1 ≤ arr의 원소 < 100

- 1 ≤ a1 ≤ b1 < arr의 길이

- 1 ≤ a2 ≤ b2 < arr의 길이


4. 예시

arr intervals result
[1, 2, 3, 4, 5] [[1, 3], [0, 4]] [2, 3, 4, 1, 2, 3, 4, 5]


5. 기본 제공 코드

function solution(arr, intervals) {
    var answer = [];
    return answer;
}


6. 제출한 내 답

const solution = (arr, intervals) => {
  return arr
    .slice(intervals[0][0], intervals[0][1] + 1)
    .concat(arr.slice(intervals[1][0], intervals[1][1] + 1));
};

 

6-2. VSC에 작성한 내용

const solution = (arr, intervals) => {
  return arr
    .slice(intervals[0][0], intervals[0][1] + 1)
    .concat(arr.slice(intervals[1][0], intervals[1][1] + 1));
};

// 테스트
console.log(
  solution(
    [1, 2, 3, 4, 5],
    [
      [1, 3],
      [0, 4],
    ]
  )
);

 

테스트

let a = [1, 2, 3, 4, 5];
let b = [
  [1, 3],
  [0, 4],
];

console.log(a.slice(1, 3)); // [2, 3

// console.log(b[0].join(",")); // 1,3

// let c = b[0].join(","); // 문자열이라 안되나봄?
// console.log(a.slice(c)); // [1, 2, 3, 4, 5]
// console.log(a.slice(b[0].join(","))); // [1, 2, 3, 4, 5]

let c = b[0][0];
let d = b[0][1];

console.log(a.slice(c, d).concat(a.slice(b[1][0], b[1][1]))); // [ 2, 3, 1, 2, 3, 4 ]
console.log(a.slice(c, d + 1).concat(a.slice(b[1][0], b[1][1] + 1))); // [ 2, 3, 4, 1, 2, 3, 4, 5 ]

 

7. 특이사항

reduce를 써야할까 filter를 써야할까 아니면 for문을 쓸까 고민했었는데

어렵게 생각할게 아니었다

 

8. 다른 사람이 작성한 답

8-1. 전개연산자

function solution(arr, intervals) {
    const [[a,b],[c,d]] = intervals;

    return [...arr.slice(a, b+1), ...arr.slice(c, d+1)];
}

 

8-2. 전개연산자

const solution = (arr, [[s1, e1], [s2, e2]]) => (
    [...arr.slice(s1, e1 + 1), ...arr.slice(s2, e2 + 1)]
)

 

8-3. map과 for문

function solution(arr, intervals) {
    var answer = [];

    intervals.map((a)=>{
        for(let i = a[0]; i<=a[1]; i++){
            answer.push(arr[i])
        }
    })

    return answer;
}