숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 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 reverseNum = parseInt(num.toString().split('').reverse().join('')) // 받은 인자를 거꾸로 돌린 문자열 생성
if(num == reverseNum){ // 정수와 문자열을 비교하는 것이기 때문에 타입까지 비교하는 === 사용 X
return true
}else{return false}
}
요 전에 한 문제와 매우 흡사하기 때문에 후다닥 풀었다.
const sameReverse = num => {
let reverseNum = parseInt(num.toString().split('').reverse().join(''))
let anwser = reverseNum == num ? true : false // 삼항연산자로 코드 줄이기 + 문자열 정수 비교기 때문에 == 사용
return anwser
}
빠른 리팩토링. 리엑트를 배우는데 슬금슬금 쓰고있는 삼항 연산자를 사용하였다.
시간 내 문제는 풀었으니 바로 형변환을 최소한으로 해보자.
const sameReverse = num => {
let str = num+""
for(i in str){
if(str[i] == str[str.length-i-1]){
continue;
}return false
}return true
}
-
의 존재때문에 정수 타입만 사용해서는 완벽하게 수를 반전할 수 없다.
정수에서는 -1441 -> 1441-가 되지 않기때문
그래서 일단 문자열로까지의 형 변환을 하기로 했다.
let str = num+""
정수를 문자열로 타입변환하는데 재밌는 방법이 있길래 따라해봤다. (JS는 뭐든지 된다구!)
for(i in str){
if(str[i] == str[str.length-i-1]){
continue;
}return false
}return true
문자열의 첫번째 문자와 마지막 문자를 비교하는 조건반복문을 작성하였다. ex) '123456'-> 1
과6
/ 2
와5
/ 3
과4
비교
문제는 조건문을 사용하면 무조건 if문의 { }박스 안에 식을 넣어야 한다는 것이었다.
우리는 단순히 조건 비교만 원할 뿐이고 식은 필요하지 않았다.
고민하던 중 찾은 답은 continue였다.
continue JavaScript|MDN
break 문과 달리 continue는 루프의 실행을 완전히 종료하지 않고 for, while문에서 다음과 같이 동작합니다.
- while 루프에서는 다시 조건으로 점프합니다.
- for 루프에서는 업데이트 표현식으로 점프합니다.
// for(i in str){
// if(str[i] == str[str.length-i-1]){
// continue;
// }return false
}return true
continue를 사용한다면 조건문은 돌되, 다 돌고난 후 업데이트 표현식으로 점프한다.
결국 for문과 if문이 끝난 시점으로 점프하여 return true를 실행한다.
const sameReverse = num => {
let str = num+"";
for(i=0; i<str.length/2; i++){
if(str[i] == str[str.length-i-1]){
continue;
}return false;
}return true;
};
만약 인자로 받은 정수가 뒤집어도 같다면 ex)1221, 44244, 굳이 정수의 길이만큼 반복문을 돌릴 필요가 있을까? 라는 생각이 들었다.
for(i=0; i<str.length/2; i++){ // 문자열 길이의 반까지만 반복문을 실행 /
☕굳이 의미없는 계산을 하지 않는다면 성능이 좀 더 올라가지 않을까?
const sameReverse = num => {
let r = 0;
let q = 0;
let a = num;
while(a){
r = a%10;
q = (q*10) + r;
a = parseInt(a/10);
}
let answer = num === q && num>0? true : false;
return answer;
};
Code Kata를 할 수록 JS기본을 공부 했던 것이 도움이 많이 된다고 생각한다.
🔥생각해보니 내가 멍청했다. 애초에 음수일 경우에 false가 출력되게끔 한다면, 이 식은 정수타입만으로 해결할 수 있다.🔥
이전 정수를 반전할때와 같은 식을 활용하였다.
달라진 부분이라면,
let a = num // 인자로 받는 num값을 while문에 넣어 돌린다면 num값 자체가 바뀌게 된다.
while(a){
r = a%10;
q = (q*10) + r;
a = parseInt(a/10);
}
이러면 a값을 가공하더라도 num값에 영향을 미치지 않는다. 반대로 num값을 가공하더라도, a값에 영향이 가지 않는다.
💡역시 3번식이 가장 빠른것을 볼 수 있다.💡