D.evelop [CS]/Algorithm

[Algorithm 007] JS - sameReverse

Danne 2021. 9. 16. 20:53

Q. 숫자인 num을 인자로 넘겨주면, 뒤집은 모양num과 똑같은지 여부를 반환

num: 숫자
return: true or false (뒤집은 모양이 num와 똑같은지 여부)

 

예를 들어

num = 123 
return false // 321

num = 1221 
return true  // 1221

num = -121 
return false // 121-

num = 10 
return false // 01

 

 

처음 접근 방법

const sameReverse = num => {
  let txt = num.toString();
  let arr = txt.split('');           // [ '1', '2', '3' ]
  let arrRevere = txt.split('');
  arrRevere.reverse();               // [ '3', '2', '1' ]
  
  for( i = 0 ; i < arr.length ; i++){

    if( arr[i] === arrRevere[i]){
      return true
    }
  }
  
  return false
}

sameReverse(123)

또 문제를 최대한 쪼개서 다가가자 싶어 하나하나 작성해나갔다.

 

1. 숫자를 배열로 만들자.
2. 배열로 만들기 위해 숫자를 문자로.
3. 그 배열을 뒤집어 또 다른 배열로 만들고
4. 두 배열의 각 인덱스의 값을 비교해서 모두 일치하면 true

 

3번 까지 해결하고 4번을 위해  for문을 돌렸지만 원하는 결과가 나오지 않았다.

고민을 하던 중 네이게이터님이 join()메서드를 추천해 주셨다.

 

js는 미친 dynamic type languague라고 말하던 드림코드 엘리님의 음성이 스쳐가던 순간

 

 

A. 최종 답

const sameReverse = num => {
  return num.toString().split('').reverse().join('') == num ? true : false;
  
}

sameReverse(123)   // false
sameReverse(1221)  // true
sameReverse(-121)  // false
sameReverse(10)    // false

늘어놓았던 불필요한 변수를 하나씩 합쳐 parmeter를 그대로 사용하도록 줄였고 if문을 삼항연산자로 작성.

 

 

 

[다시 배운 것]

  •  join() 을 사용할 때, ','(콤마)없이 합치려면 '()'괄호사이에 ''(따음표)을 넣어 줘야함.(MDN명세)
let arr = ['1', '2', '3'];

console.log(arr.join());    // "1,2,3"
console.log(arr.join(''));  // "123"

 

  • 비교 연산자의 엄격 모드
'1' === 1 ? true : false;   // false

'1' == 1 ? true : false;    // true

처음에 === 로 비교했다가 계속 false가 나왔다.

string과 number의 비교인데 엄격모드 연산자로 비교한 것이 문제였다.

(비교연산자)

 

이 부분은 알면서도 실수한 부분이라 반성해야한다. 

 

 

반응형