Algorithm) Codekata_Day 2

김명성·2021년 7월 20일
0

Algorithm

목록 보기
2/61
post-thumbnail

❓ Question

어떤 함수에 정수인 숫자를 인자로 받아 그 숫자를 뒤집어서 return
ex) 1234 => 4321 / -1234 => -4321 / 1230 => 321

📝 My Solution

  1. {정수}를 인자로 받는 함수 생성
  2. 수를 문자로 변경
  3. 문자를 배열로 변경
  4. 배열의 각 인덱스를 뒤집기
  5. 뒤집어 준 인덱스를 하나로 병합
  6. 병합한 문자를 숫자로 변경
  7. 만약 음수라면 배열에서 '-'를 제거한 뒤 다시 4번으로 이동
  8. 변경한 숫자에 -1을 곱해 다시 음수로 변경
const reverse = x => {					// 1
  const changeString = x.toString();			// 2
  const arrayString = changeString.split('');		// 3
  if (x < 0) {
    arrayString.shift('-')				// 7
    const reverseString = arrayString.reverse();	// 4
    const joinString = reverseString.join('');		// 5
    const changeNumber = Number(joinString) * -1	// 8
    return changeNumber;
  } else {
    const reverseString = arrayString.reverse();	// 4
    const joinString = reverseString.join('');		// 5
    const changeNumber = Number(joinString);		// 6
    return changeNumber;
  }
}

▪️ Solution review

과정 하나하나를 쪼개서 어떤 식으로 동작이 이뤄질지를 생각했다.
그러다 보니 너무 긴 코드가 나왔고,
받는 인자가 음수인 상황을 고려하다 보니 똑같은 코드가 중복되는 경우가 나왔지만,
결국 결과값은 올바르게 도출할 수 있었다.


📝 Another Solution

const reverse = x => {
  let reverseNum = parseInt(x.toString().split('').reverse().join(''))*Math.sign(x);
  return reverseNum;
}

▪️ Solution review

하나의 인자를 갖고 여러 메소드를 적용하는 방법에 대해
인지하지 못하고 있던 부분이 있었는데, 이런 방법을 통해서 작성하면
코드의 길이도 줄이고, 빠른 결과값도 도출할 수 있겠다.

코드가 적용된 순서를 살펴보자면 이렇다.

  • x.toString() : x 를 문자로 변경
  • .split('') : 배열에 글자 하나하나 삽입
  • .reverse() : 배열의 글자 순서를 뒤바꿔 줌
  • .join('') : 배열의 모든 글자를 하나로 합침
  • parseInt() : 문자를 분석해 특정 진수값의 정수를 반환
  • Math.sign(x) : x 의 부호를 반환 (양수면 +1 / 음수면 -1)

parseInt() 의 경우는 어떤 문장의 특정 진수값의 정수를 반환한다고 했는데,
기본값이 10진수가 아니기 때문에 문자가 섞인 문장이라고 한다면,
원하는 진수값을 표기해 주는 것이 좋겠다.

profile
잠재력은 핵폭탄급 Frontend Developer

0개의 댓글