[프로그래머스 코딩테스트 기초] 배열 조각하기 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 13일
0

코딩테스트연습

목록 보기
26/106
post-thumbnail

1. 문제 설명

2. 제한 사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-12-13)

이 부분은 for문을 이용해 query의 인덱스의 홀짝 여부에 따라 arr 배열의 앞과 뒤를 자르는 코드입니다.

그러나 문제에서 나와있듯이 한 개의 요소를 자르는 것이 아니라 선택된 query의 값의 앞의 전부, 또는 뒤의 전부를 자르는 것이기에 이 점을 유의하며 조건문을 완성해야 합니다.

저 같은 경우 arr.splice(query[i] + 1, 1), arr.splice(query[i] - 1, 1) 로 앞 뒤 범위를 정하고 '하나만' 자르는 건 줄 알고 "왜 안되지?" 라는 의문으로 한참 보다가 여기서 참고를 해봐도 도통 이해가 가질 않았는데, 문제를 다시 한 번 보고난 후 1개를 자르는게 아니라 앞, 뒷부분을 잘라서 버린다는걸 깨닫고 허탈해 했던 기억이 있습니다... 😅

또한 저는 if문의 조건 중에 인덱스 선택을 i가 아니라 (query.indexOf(query[i])) 로 설정을 했는데, 이 때문에 만약 query 배열 중에 중복된 숫자가 있을 경우 indexOf 특성상 첫번째 숫자의 인덱스를 반환하기 때문에 if 분기점이 다른 곳으로 돌아가는 현상을 초래시켰습니다.

그래서 왠만한 숫자열 배열의 순회에 있어서는 indexOf 메서드 보다는 i의 값을 활용하자는 교훈도 얻었던 문제 풀이 시간이었습니다.

function solution(arr, query) {

    for(let i = 0 ; i < query.length ; i++){ // query의 배열 길이만큼 for문을 반복하면서
        if(i%2 === 0){ // 해당 i(query의 인덱스)가 짝수라면

           arr.splice(query[i] + 1, arr.length - query[i] + 1); // splice 메서드로 기존 arr의 배열에 뒤의 값을 잡고 자를 범위로 (배열의 길이 - 뒤의 값) 까지 범위로 설정합니다. 만약 현재 arr 배열의 길이가 6이라고 하고 query의 현재 값이 3이라고 한다면 splice(4, 2(6 - 4))의 범위, 즉 선택된 범위부터 arr 배열의 끝까지의 범위로 잡고 배열을 자를 수 있습니다.
        }else{ // 그 다음 조건, i가 홀수라면
           arr.splice(0, query[i]) // 이번에는 선택된 뒤의 전부를 잘라야 하는데, 아쉽게도 선택 지점부터 배열의 첫지점까지 가게 하는 방법은 없기 때문에, 이럴 경우 배열의 첫 지점부터 query의 i번째 까지 자르면 됩니다. 만약 query가 2라고 하면 0,2가 되고, 이는 곧 arr의 2번째 인덱스를 선택해서 arr 배열의 뒷편 끝까지 자르는 효과를 줄 수 있기 때문입니다.
        }
    }
    return arr; // 처리된 arr 반환
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글