본문 바로가기

코딩테스트

[JS] 배열 조각하기

728x90

문제 설명

정수 배열 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의 길이 보다 작습니다.

입출력 예

arr query result
[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) {
  var arrLength = arr.length;
  if (arrLength < 5 || arrLength > 100000) return arr;

  var queryLength = query.length;
  if (queryLength < 1 || queryLength > Math.min(50, arrLength / 2)) return arr;

  for (let index = 0; index < query.length; index++) {
    var element = query[index];
    if (element < 0 || element >= arr.length) return arr;

    if (index % 2 == 0) {
      // 짝수
      var valueToPush = arr[element];
      arr = arr.slice(0, element);
      arr.push(valueToPush);
    } else {
      // 홀수
      arr = arr.slice(element);
    }
  }

  return arr;
}

풀이

slice() 에 대한 이해

[출처]

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

728x90

'코딩테스트' 카테고리의 다른 글

[C#] 분수의 덧셈  (0) 2024.02.21
[C#] 올바른 괄호  (0) 2024.02.21
[JS] 주행거리 비교하기  (0) 2024.02.20
[JS] 주사위 게임 3  (0) 2024.02.20
[JS] K번째수  (0) 2024.02.20