알고리즘

[알고리즘] 완전탐색 자연수배열요소 뒤집어 정렬하기

헤이봄봄 2022. 2. 3. 14:07
자연수배열요소 뒤집어 정렬하기 



N개의 자연수가 입력되면 각 자연수를 뒤집은 요소가 담긴 배열을 리턴한다 

 

 

 

입력예제

[32, 55, 62, 20, 250, 370, 200, 30, 100]

출력예제

[23, 55, 26,  2, 52, 73, 2, 3, 1]

 

 

1. 처음 짠 코드

function solution(arr){
  let answer=[]; //최종 리턴할 요소를 담을 배열
  
  // 요소 하나하나를 배열로 만들어서 answer배열에 담기
  arr.forEach(el => {
    answer.push(el.toString().split("")); 
  });
  
  //배열로 만든 요소 하나하나를 돌면서 거꾸로 만들어준뒤
  //join하여 number타입으로 바꿔서 answer배열안에 담아주기
  for(let i=0; i<answer.length; i++){
    let st =[]
    for(let j=answer[i].length-1; j>=0; j = j-1){
      st.push(answer[i][j])
    }
    answer[i] = Number(st.join(''));
    st=[];
  }
  
  return answer;
}

입력으로 들어온 요소 하나하나를 배열로 만들어준뒤 temp에 담고, 이중for문을 이용해서 요소를 거꾸로 정렬하여 st 어레이에 다시담고, 이를 join하여 다시 temp배열에 담아주었다

 

헌데 생각해보니 그냥 reverse()로 뒤집어주면 될것을 ...

 

 

 

2. toString하여 reverse 한줄로 끝내버리기

function solution(arr){
  let answer=[];
  arr.forEach(el => {
    answer.push(Number(el.toString().split("").reverse().join("")))
  });

  return answer;
}

배열에 들어있는 요소를 toString하여 문자열로 바꿔주고

split을 사용해 배열로 바꿔준후

reverse하여 거꾸로 정렬하고, 다시 join하여 문자열로 바꿔준 것을

Number()함수로 묶어 숫자로 변환시켜서 answer배열에 담아 리턴하기도 가능하다

 

 

 

3. while문을 사용하여 숫자상태로 거꾸로 변경해버리기

function solution(arr){
  let answer=[];
  arr.forEach(el => {
    let res = 0;
    while(el !== 0){
      let t = el%10;
      res = res*10 + t
      el = parseInt(el/10)
    }
    answer.push(res);
  });

  return answer;
}

처음에 문자로 변환해서 배열로 만들고 ..... 

하는 과정만 생각했는데

위와같이 숫자요소를 10으로 나누어 res변수에 담아주고 

다시 그 변수에 10을 곱한뒤 나머지를 더하는식으로 while문을 돌려주는 방법도 있었다.

 

 

 

 

 

 

3번과정도 익숙해지면 사용하기 편할것같으나

아직까지는 2번과정이 더 사용하기 편리하게 느껴지는듯하다 !