[JavaScript] Lv0 - 배열 조각하기

Moon·2025년 1월 19일
0
post-thumbnail

배열 조각하기

문제 설명

정수 배열 arr와 query가 주어집니다.

query를 순회하면서 다음 작업을 반복합니다.

  • 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
  • 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.

위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 5 ≤ arr의 길이 ≤ 100,000
    • 0 ≤ arr의 원소 ≤ 100
  • 1 ≤ query의 길이 < min(50, arr의 길이 / 2)
    • query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.

입출력 예

arrqueryresult
[0, 1, 2, 3, 4, 5][4, 1, 2][1, 2, 3]

입출력 예 설명

입출력 예 #1

  • 이번에 매번 처리할 query의 값과 처리 전후의 arr의 상태를 표로 나타내면 다음과 같습니다.
query의 값query 처리 전query 처리 후비고
4[0, 1, 2, 3, 4, 5][0, 1, 2, 3, 4]0번 인덱스의 쿼리이므로 뒷부분을 자른다.
1[0, 1, 2, 3, 4][1, 2, 3, 4]1번 인덱스의 쿼리이므로 앞부분을 자른다.
2[1, 2, 3, 4][1, 2, 3]2번 인덱스의 쿼리이므로 뒷부분을 자른다.
  • 따라서 [1, 2, 3]을 return 합니다.


function solution(arr, query) {
    // query 배열을 순회하며 arr을 조작
    query.forEach((v, i) => {
        i % 2 === 0 ? arr.splice(v + 1) : arr.splice(0, v);
    });

    return arr;
}

// 입출력 예 테스트
console.log(solution([0, 1, 2, 3, 4, 5], [4, 1, 2])); // [1, 2, 3]
console.log(solution([10, 20, 30, 40, 50], [2, 1, 3])); // [30, 40]
console.log(solution([5, 6, 7, 8, 9], [3, 2, 4])); // [7]
console.log(solution([1, 2, 3, 4, 5, 6], [5, 2, 1])); // [2, 3]

코드 설명

  1. forEach 반복문:
    • query 배열을 순회하며 인덱스 i와 값 v를 가져옵니다.
    • 인덱스 i가 짝수인지 홀수인지에 따라 조건을 나누어 작업합니다.
  2. 짝수 인덱스 (i % 2 === 0):
    • arr.splice(v + 1):
      • 배열에서 인덱스 v + 1 이후의 모든 요소를 제거합니다.
      • 예: arr = [0, 1, 2, 3, 4, 5], v = 4arr.splice(4 + 1)arr = [0, 1, 2, 3, 4].
  3. 홀수 인덱스:
    • arr.splice(0, v):
      • 배열에서 v 인덱스 이전의 모든 요소를 제거합니다.
      • 예: arr = [0, 1, 2, 3, 4], v = 1arr.splice(0, 1)arr = [1, 2, 3, 4].
  4. 결과 반환:
    • 모든 작업이 끝난 후 남은 배열 arr를 반환합니다.
profile
MOON.DEVLOG

0개의 댓글