자료구조 & 알고리즘/프로그래머스

[programmers] Lv0. 배열뒤집기 Day5

건강한_개발자 2023. 2. 16. 01:12

function solution(num_list) {
    return num_list.reverse()
}

1. 나의풀이

우선 크게 3가지 방법이 떠올랐다.

방법1. 무식하게풀기 => 배열1번부터 마지막까지 새 변수에 저장해서 뒤집은 배열에 unshift해주기

방법2. 배열 마지막 원소를 첫번쨰원소에 넣는 식으로 하기

방법3. reverse() 내장함수 사용하기

=> 방법3 내장함수 사용은 왠만하면 안하고 풀려고한다. 알고리즘 연습이기때문 다른언어에는 이런 내장함수가 없는걸로 알고 있다.

 

방법1.  무식하게 풀기 

function solution(num_list) {
  
    let i =0;
    let temp = [];
    let newNum_list= [];
    
    for(i; i< num_list.length; i++){
        temp[i] = num_list[i] 
        newNum_list.unshift(temp[i])
    }
    
    return newNum_list;
}

 

방법3. reverse() 내장함수 사용하기  (가장 많이 푼 풀이 1315명)

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

방법2는 실패했다.

 

방법4. 블로그참고 https://hianna.tistory.com/448  for 반복문 사용

function solution(num_list) {
    let reverse = [];
    
    for(let i=num_list.length-1; i>=0; i--){
        reverse.push(num_list[i])
    }
    
    return reverse;
}

 

느낀점.

방법1은 배열에서 왠만하면 사용하지말라는 unshift를 사용했다.. 실력이 부족한 탓인지 이 방법이 두번쨰방법 다음으로 생각났는데 어쨌거나 문제는 풀 수 있었다. 하지만 비효율적이라는건 알고 있다. 아직 알고리즘 문제푼지 얼마 안됬기 때문에풀 수 있음에 기분이 좋기는 했다.

 

사실 방법2를 처음 생각했는데 마지막 인덱스를 0번인덱스로 ...마지막-1인덱스를 1번인덱스로 하는 과정에서 [1,2,3,4,5] 라면 [5,4,x,x,x] 로 중간 전까지만 풀리고 결국 막혔다.

 

방법4는 블로그에서 참고했지만, 이정도는 조금더 생각하면 나오지 않았을까? 하는 생각이든다. 

 

추가

방법5. while 문 사용

function solution(num_list) {
    let reverse = [];
    
    let cnt =num_list.length -1;
    while(cnt>=0){
        reverse.push(num_list[cnt]);
        cnt--
    }
    return reverse;
}