오늘의 문제는 정수를 뒤집어주는 reverse()함수를 만드는 것이었다.
처음 봤을 때 바로 .split('')해주고 .reverse()한다음 .join해주면 일반적인 경우는 해결 될것이라 생각했다.
근데 이 정수를 split을 이용하여 배열로 만들려면 문자열로 먼저 변환해주어야하는데 그것이 오히려 문제를 푸는데 방해를 한거같다.
문자열에 갇혀서 이것을 슬라이싱하여 -가 붙을경우 2번째 인덱스부터하고 -가 없을 경우 첫번쨰부터 슬라이싱을 해야겠다고 생각했다.
또한 문제의 예시에서 끝부분이 0인경우도 제시해서 0인경우는 slicing을 뒤에서 2번째까지 해야겠다고 생각하고 코드를 적었다.
결국 문제는 풀었는데 코드가 너무 길고 if문도 중첩되서 너무 지저분했다.
하지만 Number() 즉 문자열을 숫자형으로 바꾸면 01234
와 같이 앞의 0은 지워진다는 것을 알게되었다.
그러면 굳이 0인 경우를 나눌 필요가 없는것이다. 어쩌피 join을 하고 Number()로 type을 바꾸어주어야하기 때문에......
const reversePn = (x) => {
let xPos = x.slice(0, x.length)
let result = xPos.split('').reverse().join('');
return Number(result);
}
const reverseNn = (x) => {
let xNeg = x.slice(1, x.length)
let result = xNeg.split('').reverse().join('');
return Number('-'+result);
}
const reverse = x => {
const xStr = `${x}`
if (xStr[0] == '-') {
let resultReverse = reverseNn(xStr);
return resultReverse;
}
else {
let resultReverse = reversePn(xStr);
return resultReverse;
}
}
사실 슬라이싱을 안하고 풀면 더 쉽게 풀 수 있다.
const reverse = x => {
absX = Math.abs(x);
const newX = absX.toString().split('').reverse().join('');
result = Number(newX);
if (x<0) {
result = 0 - newX;
}
return result;
위는 동기님의 풀이인데 x의 값이 정수인것을 이용하여 절대값으로 음수와 양수인 경우를 나누었고 x<0이면 그냥 바로 -를 붙이는 형식으로 푸셨다. 0-newX
가 숫자형으로 되는 것은 number모양을 한 string이랑 숫자랑 계산하면 숫자가 되는 Js의 문법을 사용하였다. 코드가 훨씬 간단하다.
const str = x.toString();
const result = str.split("").reverse();
if (result[result.length-1]=== "-") {
result.pop();
result.unshift("-");
}
return Number(result.join('')) ;
위는 짝님의 풀이이다.
이 풀이가 좋았던것은 split reverse를 하고 바로 join을 하지않고 중간에 if문을 써서 푼것이다. 뒤집은 배열에서 -부호는 제일 뒤에 있을 것이니까 pop()해주고 unshift를 통해서 -를 다시 첫번째 index에 붙이는 것이다.
사람들의 풀이는 다양하다. 너무 1차원적으로 생각하면 안될 것 같다. Number()처럼 문자열이 숫자형으로 변환되면 문자열안의 첫번째0을 그냥 없애줄수도 있는 그런 부가적인 개념을 알면 더욱 쉽게 풀 수 있듯이!!!!