[알고리즘] - 숫자 뒤집기

Baoro·2022년 2월 15일
0

알고리즘

목록 보기
2/2

1. 문제 내용

reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.

x: 숫자 return: 뒤집어진 숫자를 반환!

예들 들어, x: 1234 return: 4321

x: -1234 return: -4321

x: 1230 return: 321


2. 알고리즘 구상

먼저 reverse() 메서드가 생각이 났다. 하지만 reverse메서드의 경우 인자가 배열이어야하기 때문에 number에서 string으로 바꾸는 toString메서드를 제일 먼저 쓰고 마지막에 다시 number로 바꿔주기 위해 parseInt 메서드를 써야했다.
toString으로 인자를 바꿔줬는데 문제가 있었다. array의 index=0에 모든 값이 다 들어가는 것이다. 이를 해결하고자 split('')를 이용했다. 이 메서드는 ''공백을 기준으로 문자를 하나씩 배열의 index에 넣는 것이다. 이 후 reverse() 메서드로 배열을 뒤집고 join('')으로 다시 모든 문자를 합쳤다. 마지막으로 parseInt로 숫자로 다시 반환하였다.
한가지 더 문제가 있었다.
양수의 경우만 생각하고 음수의 경우를 생각하지 않았다. 이 문제는 Math.sign() 메서드를 이용하였다.


3. 알고리즘 정리

1) 숫자 -> 문자 (toString)

2) 문자를 하나씩 쪼개서 배열화 (split(''))

3) 배열을 뒤집는다 (reverse())

4) 배열을 다시 붙인다. (join(''))

5) 문자 -> 숫자 (parseInt)

6) 부호 선택 (Math.sign())


4. 코드 리뷰

Math.sign이란 숫자에서 부호문제를 해결할만한 좋은 메서드를 처음 알게되었다. 이 메서드를 이용해 부호문제를 해결할 수 있었지만 if문을 통해서도 부호문제를 해결 할 수 있었다.

if(answer < 0){		//answer : reverse한 결과값
  return answer*(-1);
}
else{
  return answer
}

5. 다른 아이디어

다른 동기들의 알고리즘 해결방식을 보다가 기발한 방식을 발견했다.

let number = 1234;	/// 테스트할 값
if (number > 0) {
    let res = 0;
    while (number > 0) {
      let t = number % 10;    // 1의 자리
      res = res * 10 + t; 
      number = parseInt(number / 10); //몫 구하기
      console.log(res);
  }
}

결과값

4
43
432
4321

내가 이 코드를 보고 놀란 것은 배열로 변환하지 않고 조건문과 반복문으로 구성되어있다는 점이었다. 이해가 잘 되지 않아서 반복횟수에 따른 변수값들을 써보았다.

반복횟수numbertresnumber
1123444123
212334312
31224321
41143210
profile
꾸준히.... 깔끔하게.... 끝까지....

0개의 댓글