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개의 댓글

관련 채용 정보