Code Kata Day 2

SYhwang·2023년 1월 18일
0

코드카타

목록 보기
2/10

문제

reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.

x: 숫자
return: 뒤집어진 숫자를 반환!

예들 들어,
x: 1234
return: 4321

x: -1234
return: -4321

x: 1230
return: 321

풀이

const reverse = x => {
  let result = x.toString().split('').reverse().join('');
  if (x >= 0) { return parseInt(result) }
  else { return parseInt(result) * -1 }
}

풀이 1

  • string과 array의 메서드들을 최대한 활용했다.
  1. x가 숫자이므로 한 글자씩 쪼개기 위해 우선 toString()을 이용해 string으로 변환했다. 결과 -> "1234"
  2. 변환된 string을 spilt("")으로 쪼개 배열로 만들었다. 결과 -> ["1", "2", "3", "4"]
  3. 쪼개진 배열에 reverse()를 사용해 요소의 순서를 뒤집었다. 결과 -> ["4", "3", "2", "1"]
  4. 뒤집어진 배열에 join("")을 사용해 다시 string으로 변환했다. 결과 -> "4321"
  5. 위 결과값을 변수 result를 선언해 할당했다.
  6. x가 0 이상이라면 parseInt(result) 로 result를 숫자로 변환해 return 한다.
  7. 그렇지 않다면(x가 0보다 작다면) parseInt(result) 에 -1을 곱해 다시 음수로 만들어 반환한다.
  • 메서드의 사용법을 정확하게 숙지하지 못해 parseInt나 join의 결과가 원하는 대로 나오지 않는 문제가 있어, 중간 결과들을 console log로 계속 확인해 가며 시행착오를 겪었다. 메서드를 사용할 때는 단순히 메서드의 기능뿐 아니라 들어가는 인자, 반환값의 형태, 메서드가 원래 요소에 미치는 영향을 꼭 생각해 가며 사용해야 한다는 사실을 배웠다.
const reverse = x => {
  let str = x.toString();
  const reverseArr = [];

  if (str[0] === '-') {
    for (let i = 1; i < str.length; i++) {
      reverseArr.unshift(str[i]);
    }
    const newReverse = reverseArr.toString().replace(/,/g, '');
    return -Number(newReverse);
  }
  else {
    for (let i = 0; i < str.length; i++) {
      reverseArr.unshift(str[i]);
    }
    const newReverse = reverseArr.toString().replace(/,/g, '');
    return Number(newReverse);
  }
}

풀이 2

  • for문을 이용해 array에 하나씩 unshift 하는 방법으로 순서를 뒤집었다.
  1. x가 숫자이므로 한 글자씩 쪼개기 위해 우선 toString()을 이용해 string으로 변환했다. 결과 -> str "1234"
  2. 빈 배열 reverseArr를 선언했다.
  3. str[0] 이 '-'라면 (x가 음수라면) str의 요소를 인덱스 1부터 시작해 reverseArr에다 unshift를 이용해 한 글자씩 거꾸로 넣는다. 결과-> reverseArr ["4", "3", "2", "1"]
  4. 그 뒤 reverseArr를 toString을 이용해 string으로 변환한다. 결과-> "4,3,2,1"
  5. 위 결과값에 replace(/,/g, '')를 이용해 모든 ','를 ''로 변환하고 변수 newReverse에 저장했다. 결과-> newReverse "4321"
  6. Number(newReverse)로 newReverse를 숫자로 변환하고, -를 붙여 반환한다.
  7. x가 양수일 경우 위의 과정이 거의 동일하나, str를 reverseArr에 unshift 할 때 인덱스 0부터 모두 사용하고, 마지막에 리턴시 - 없이 리턴한다.
  • 메서드 사용을 줄여서 풀어보자! 라는 발상으로 시작했으나, 풀이 1번과 전개 로직 자체는 비슷해 replacetoString을 사용했다. replace를 사용하면 모두 바꾸기가 될 줄 알았는데 처음 발견한 요소만 변환해 주는 메서드라는 것을 처음 알았고, replace를 활용하는 법을 검색하다 정규식에 대해 알게 되었다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions 을 참고해 정규식에 대해 더 공부해야겠다.

0개의 댓글