본문 바로가기
알고리즘

[CodeKata] Week 1 - Day 2 ( JavaScript )

by 프린벼르 2022. 2. 15.

CodeKata 2일차 문제

1. 나의 생각 흐름

두 가지 해법을 찾았다. 우선 가장 간단하게 if문을 이용해서 답을 찾는 풀이, Math메소드를 이용해서 답을 찾는 풀이. 

2. 나의 코드 정리

// 풀이 1
const reverse = x => {
  // 여기에 코드를 작성해주세요.
return parseInt(x.toString().split('').reverse().join('')) * Math.sign(x);
}
//x가 숫자의 형태니까 문자의 형태로 변환을 해준 다음 split을 통해 한 묶음의 문자를 각각 한개씩 나눠준다.
//그래야 reverse로 뒤집을 수 있기 때문! reverse로 뒤집고 난 후, join을 통해 하나로 묶어준다.
//이 하나의 문자를 parseInt를 통해 숫자로 변환해준 후, 마이너스 부호의 경우 그대로 부호를 가져와야하기에
//Math.sign()메소드를 이용해서 곱해주면 된다.
** Math.sign() 메소드 ** 
사용법 : Math.sign(숫자) // number
부호를 알아내기 위한 helper method 
Math.sign() 함수는 주어진 수의 부호를 나타내는 +/-1을 반환한다.
단, Math.sign()에 제공한 수가 0일 경우 부호에 따라 +/-0을 반환한다. (양수는 +로 표기하지 않고 생략한다)
Reverse Int(숫자 거꾸로 바꾸기) Algorithm에서 유용하게 사용했다.
(number를 string으로 바꿔 다루는 경우, 최종값은 number로 반환해야 하기 때문에 부호를 되찾을 때 사용한다)

Math.sign() 예제

Reverse Int algorithm을 다룰 때, test case로 주어진 number값을 string으로 변환 후 순서를 뒤바꿔 줘야한다.
따라서, 마지막 결과값을 return 해줄 때, Math.sign(test case값)을 곱해주면 본래의 부호를 손쉽게 다시 되찾을 수 있다.
// 풀이 2
const reverse = x =>{
  let answer = parseInt(x.toString().split('').reverse().join(''));
  if(answer < 0) { return answer * (-1)}
  else{ return answer}
}

3. 결론

문제 풀때 항상 느끼는 것은 간단하게 풀 수 있는 메소드들이 정말 많다는 것이다. 앞으로 다양한 문제들을 풀면서 다양한 메소드를 공부해야겠다. 그러면 좀 더 간단하게 편하게 문제를 풀 수 있고 시간도 절약되는 것 같다.

댓글