Javascript-level : 코딩테스트 입문 - 배열 뒤집기

HS K·2022년 12월 19일
0

문제설명

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ num_list의 길이 ≤ 1,000
0 ≤ num_list의 원소 ≤ 1,000

내가 쓴 답

function solution(num_list) {  
    let blank = [];
    for (i=0; i<num_list.length; i--) {
       return blank.push(num_list[num_list.length+i])
    }
}

※ 참고로 틀린 답이다. 어디가 틀렸을까?

  • for문의 조건식 부터 틀렸다. 길이가 n인 배열은 index가 0부터 n-1까지 있다는 사실부터 고려해야한다. 하지만 내가 쓴 조건문은 num_list[0]가 포함되지 않은 조건이므로, 문제의 조건을 맞추기 위해서는 <=로 바꿔줘야한다.
  • 증감식인 i-- 부분이 틀렸다. 초기값인 i=0부터 시작하여 하나씩 깎여내려가야하는데, 위의 식처럼 작성하게 된다면 index가 음수값이 되어버린다. 그러면 무한하게 돌아버린다. 따라서 조건을 0부터 하는게 아니라 거꾸로 해줘야한다.

수정한 답

function solution(num_list) {
    var answer = [];
    var j = num_list.length
    for(var i = 1; i <= j; i++){
        answer.push(num_list[j-i])
    }
    return answer;
}

여러종류의 풀이 보기

function solution(num_list) {
    // return num_list.reverse();

    const answer = [...num_list];

    for (let i=0,len=Math.floor(answer.length/2); i<len; i++) {
        const rightIdx = answer.length - 1 - i;
        const left = answer[i];
        const right = answer[rightIdx];
        answer[i] = right;
        answer[rightIdx] = left;
    }

    return answer;
}
function solution(num_list) {
    var answer = [];
    num_list.forEach(i => answer.unshift(i))
    return answer
}

후기

어려운 문제는 아니었지만, 아직 반복문과 함수를 작성하는게 익숙치않아 작성을 하더라도 내가 어디에서 틀렸는지 바로바로 파악하는 속도가 부족하다. 아마 개념과 기본기가 부족해서 그럴 것이라고 생각한다.

  • for문에서 return은 어디에서 해야하는지
  • 본문은 어떻게 작성하는지
  • 초기식, 조건식, 증감식 작성연습

을 복습 및 학습할 수 있어서 좋았다.

profile
주의사항 : 최대한 정확하게 작성하려고 하지만, 틀릴내용이 있을 수도 있으니 유의!

0개의 댓글