저장을 습관화

프로그래머스 LV.0 배열 조각하기 본문

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

프로그래머스 LV.0 배열 조각하기

ctrs 2023. 10. 3. 22:19

프로그래머스 LV.0 배열 조각하기

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 명

배열 조각하기


2. 문제 설명

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

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

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


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


3. 제한 사항

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


4. 예시

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


5. 기본 제공 코드

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


6. 제출한 내 답

const solution = (arr, query) => {
  for (i = 0; i < query.length; i++) {
    if (i % 2 === 0) {
      arr = arr.slice(0, query[i] + 1);
    } else {
      arr = arr.slice(query[i]);
    }
  }
  return arr;
};
정확성  테스트
테스트 1 〉	통과 (1.20ms, 39.8MB)
테스트 2 〉	통과 (2.20ms, 36.7MB)
테스트 3 〉	통과 (0.61ms, 34.6MB)
테스트 4 〉	통과 (0.34ms, 34MB)
테스트 5 〉	통과 (0.36ms, 35.5MB)
테스트 6 〉	통과 (0.65ms, 36.1MB)
테스트 7 〉	통과 (0.90ms, 36.2MB)
테스트 8 〉	통과 (0.41ms, 34.6MB)
테스트 9 〉	통과 (0.76ms, 36MB)
테스트 10 〉	통과 (0.25ms, 33.8MB)
테스트 11 〉	통과 (0.24ms, 33.7MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

6-2. VSC에 작성한 내용

const solution = (arr, query) => {
  for (i = 0; i < query.length; i++) {
    if (i % 2 === 0) {
      arr = arr.slice(0, query[i] + 1);
    } else {
      arr = arr.slice(query[i]);
    }
  }
  return arr;
};

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


7. 특이사항

없음. 이게 왜 3점 짜리지?

정답률이 66%밖에 안된다고?

문제가 개편되면서 쉬워진건가


8. 다른 사람이 작성한 답

8-1.

function solution(arr, query) {
    let s = 0;
    let e = query.length - 1;
    for (let i=0; i<query.length; i++) {
        if (i%2==0) e = s + query[i];
        else s += query[i];
    }
    const answer = arr.slice(s, e);
    return answer.length ? answer : [-1];
}

 

8-2.

function solution(arr, query) {
    let start = 0;
    let end = 0;

    for(let i = 0; i < query.length; i++){
        if(i%2===0){
            end = start + query[i];
        } else {
            start += query[i];
        }
    }
    return arr.slice(start, end).length ?
        arr.slice(start, end) : [-1]
}

 

8-3.

function solution(arr, query) {

  let answer = [...arr];
   var f=0;
    var e=0;

  for(let i=0;i<query.length;i++){

    if(i%2===0){//짝수
        e=f+query[i];
      //answer = answer.slice(0,query[i])
    }else if(i%2===1){//홀수
        f=f+query[i];
      //answer = answer.slice(query[i],answer.length);
    }
  }

  answer=answer.slice(f,e);

  return answer.length>0?answer:[-1]
}