x: 1234 return: 4321/ x: -1234 return: -4321/x: 1230 return: 321 이라면 reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요

천정환·2022년 11월 1일
0

wecode 코드카타

목록 보기
4/5

그때 그 시절 두서 없던 기록을 남깁니다. 오늘도 저는 지민님 도움을 받았어요.

먼저 생각을 해볼수는 있는것은 12345라는 정수가 있다면 리턴을 하면 54321 이라고 생각해야하고 마이너스인 음수 -12345라면 리턴을 해서 -54321 이라고 할수 있습니다.
그럼 012345라고 한다면 0은 없어지고 54321이 나와야하는데요. 여기서 마이너스 음수는 도대체 어떻게 바꿔야 하는지 고민이 엄청 많았습니다.

여기서 떠오르는 생각은 1234숫자를 어떻게 바꾸는지 관해서 생각을 진짜 많이 했습니다.
지민님은 Array.from으로 객체를 배열로 바꾸는것을 추천해주셨고 지민님 풀이를 해석하기로 했습니다. 제 머리에는 도저히 안되겠네요..

지민님 코드 작성을 보고 제가 이해한 그대로 다시한번

풀이를 써보겠습니다.

const reverse = x =>{
이라고 문제를 정해주셨어요. 먼저 숫자를 문자열로 바꿔줘야 합니다.
const str로 str 변수를 정해주세요. 그리고
String(x) 정수인 숫자를 문자열로 바꾸는거에요.

다시 코드를 짠다면
const str = String(x); 이라고 할수 있겠습니다.
여기서 먼저 x를 숫자 123를 줬다고 가정해봐요.
그럼 문자열로 바꾸면 스트링인 "123" 문자열로 되겠죠??

여기까지 이해 하셨죠?? 그럼 다시 뒤집어서 배열로 만들어줄꺼에요.
const arr이라는 변수를 정해주세요.
const arr = Array.from(str)을 넣어주세요. str은 문자열로 지금 "123"이에요.
여기서 Array.from을 해주면 정수인 숫자를 하나씩 잘라서 배열로 되는데요.
["1", "2", "3" ] 짜잔 이렇게 변해요.

여기서 웃긴건 먼저 숫자를 문자열로 만들어주고 다시 뒤집어서 배열로 만든다면 다시 배열을 숫자로 합쳐주는 작업이 들어가요. 먼저 간단하게 생각할때는 숫자를 반대로? 바꾸자 생각을 했는데요.
두번 바꾼다는 생각자체가 너무 대단한거 있죠...

그럼 또 다른 변수를 줘볼께요.

const newArr 이라는 변수를 만들어주세요. 변수는 자유롭게 원하는것 쓰셔도 되세요. 정해진틀이 있지만요. 그래서 저는 newArr이라고 할께요.

const newArr = arr.reverse(); 이라고 적어봅시다.
아까 arr이 뭐였죠? ["1", "2", "3" ] 이거 입니다. 이걸 다시 뒤집다는 말이에요.
그럼 ["3", "2", "1"] 이렇게 변환이 되네요.

거의 다왔어요. 
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt 여기 링크는 mdm에서 퍼왔어요.

배열을 다시 합쳐서 숫자로 바꿔준다는 표현인데요. 
parselnt이라고 하네요.
또 하나는 join('')인데요. 배열의 모든 요소를 연결해 하나의 문자열로 만든다고 합니다.

다시 쓴다면
const newX라는 변수를 써줄께요.
const newX = parselnt(newArr.join(''));이라고 써줄께요.
아까 newArr은 ["3", "2", "1"]인데요. 모든 요소를 연결해 하나로 문자열을 만들어주는게 join('')이였죠???

그럼 "321" 문자열로 만들어집니다. 그리고 "321"문자열을 숫자열로 다시 변환이 됩니다.

"321" ---->> 321 이 되네요. const newX는 숫자열 321이라고 생각할수 있겠습니다.


(여기서 중요!!!!처음에 x를 1230이라고 줬다고 가정하면 0이 뒤집어서 0123으로 되어있는 문자열이되었겠지만 여기서 다시 숫자열로 바꿔야하니까 0은 사라지고 321이 되는거에요!!!!)


그럼 if문으로 마지막 장식을 해보갰습니다. true와 false를 해줘야겠죠???


먼저 if ( x >= 0 ) { 
return newX 
} 이라고 써주세요. x는 0보다 크거나 같으면 아까 const newX는 숫자열 321이라고 했죠??

x가 123이면  변환되는 값은 321 

그외 나머지는 뭐라고 하면 좋을까요??? 이건 구글링 해서 알게 되었는데요.
Math.abs(함수) 인데요. 지정된 숫자를 절대값으로 변환 된다는 표현이에요.
그래서 이거는 외우는게 어렵지 않을까 싶어요. 저도 언젠간 다시 제 글을 보고 이렇게 풀었구나 이해 할수 있으면 좋겠어요.

코드를 작성한다면

else {
return Number("-" + Math.abs(newX)) 이라고 쓸수 있겠네요.

newX가 예를 들어서 -123이라고 가정했다면??? 절대값이 뭐죠?? 123이겠죠??

그리고 " - " 이라는 마이너스를 합쳐줄거에요.

123 + " - " 이면 어떻게 돼죠?? -123이 나옵니다.

const reverse = x => {
  // 여기에 코드를 작성해주세요.
  //정수인 숫자를 하나씩 잘라서 배열로
  const str = String(x);
  const arr = Array.from(str);
  //배열을 뒤집음
  const newArr = arr.reverse();
  //배열을 다시 합쳐서 숫자로
  const newX = parseInt(newArr.join(''));
  if (x >= 0) {
    return newX
  } else {
    return Number("-" + Math.abs(newX))
  }
}






결국 console.log(reverse(123)) 이라고 하면 321
console.log(reverse(-321)) 이라고 하면 -123
console.log(reverse(1230)) 이라고 하면 321이 나옵니다.



profile
손가락은 거짓말을 하지 않는다.

0개의 댓글