[프로그래머스] 순서 바꾸기

Jun_Gyu·2023년 8월 2일
0

프로그래머스

목록 보기
2/14
post-thumbnail


첫 풀이

function solution(num_list, n) {
    var answer = [];
    for (let i = 0; i < (num_list.length - n); i++) { // "n번째 이후의 원소" 이기에, 전체에서 n을 뺌.
        num_list.unshift(num_list.pop()) // 이후 n번째 이후 배열 요소들을 차례대로 맨 뒤 => 맨 앞 으로 보냄.
        answer = num_list;  // 결과값을 answer변수에 담아 출력.
    }
    return answer;
}

문제에서 n번째 이후 원소n번째까지의 원소 앞에 붙인 배열을 새로 나열해야하기 때문에,

배열 맨 끝의 요소를 추출하는 .pop()메소드와 배열의 첫 인덱스에 요소를 추가해주는 .unshift() 메소드를 활용하여 접근하였다.

문제점

하지만 19번 test에서 걸리게 된다...

그 이유인 즉슨, (num_list.length - n)의 값이 0 되는 반례가 발생하기 때문인데, 위의 값이 0이 되면 배열은 처음 상태와 동일하게 유지된다고 볼 수 있다.

해결

따라서 아래와 같이 조건문을 추가하여 반례로 인한 오류가 발생하지 않도록 해주었다.

const solution = (num_list, n) => {
    var answer = [];
    if((num_list.length - n) === 0){  // 만약 배열길이 - n 이 0이라면 원본과 똑같기 때문에
        return num_list; // 입력받은 그대로를 출력.
    }
    for (let i = 0; i < (num_list.length - n); i++) { // "n번째 이후의 원소" 이기에, 전체에서 n을 뺌.
        num_list.unshift(num_list.pop()) // 이후 n번째 이후 배열 요소들을 차례대로 맨 뒤 => 맨 앞 으로 보냄.
        answer = num_list;  // 결과값을 answer변수에 담아 출력.
    }
    return answer;
}
profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글