CodeKata 2일차

임채현·2022년 1월 11일
0

오늘의 문제는 정수를 뒤집어주는 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을 그냥 없애줄수도 있는 그런 부가적인 개념을 알면 더욱 쉽게 풀 수 있듯이!!!!

profile
열심히 살고 싶은 임채현입니다.

0개의 댓글