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의 비교인데 엄격모드 연산자로 비교한 것이 문제였다.
(비교연산자)
이 부분은 알면서도 실수한 부분이라 반성해야한다.
반응형