[CodeKata] week1 - #2, #4 review

Kyoungchan Cho·2022년 9월 2일
1

JS

목록 보기
6/8
post-thumbnail

Intro

코드카타 시간을 통해 알고리즘을 공부하고 기본기를 다져보자~
week1 #2, #4는 비슷한 메서드를 사용하므로 같이 리뷰를 해보겠다.

#2 문제

reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환!
예들 들어, x: 1234 return: 432
x: -1234 return: -4321
x: 1230 return: 321

풀이과정 1

x가 양수, 음수, 끝자리가 0일 경우, 끝자리가 0이 아닐 경우 총 4개의 경우의 수로 생각하고 아래와 같이 작성

const reverse = x => {
  const numberToString = String(x); // x를 문자열로 변환
  const numberToArray = numberToString.split(""); // x문자열을 배열로 변환
  const lastZeroNumber = (numberToString.substr(-1)); // 마지막 숫자 뽑음, 0 확인용
  if (numberToArray[0] === '-') { // x가 음수일때
    if (lastZeroNumber === 0) { // 마지막 숫자가 0이면
      numberToArray.pop(); // x배열에서 마지막 인덱스인 0을 빼고
      numberToArray.reverse(); // 배열을 뒤집어서
      numberToArray.pop(); // 뒤에 있는 '-'을 빼주고
      numberToArray.unshift('-') // 앞에 '-'을 더해주고
      return answer = Number(numberToArray.join("")); // 문자열로 붙여서 만들고 다시 넘버로 만든다.
    } else { // 마지막 숫자가 0이 아니면
      numberToArray.reverse(); // x배열을 뒤집고
      numberToArray.pop(); // 뒤에 있는 '-'을 빼주고
      numberToArray.unshift('-') // 앞에 '-'을 더해주고
      return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
    }
  } else { // x가 양수일때
    if (lastZeroNumber === 0) { //마지막 숫자가 0이면
      numberToArray.pop(); // 배열로 만든거에서 0을 빼고
      numberToArray.reverse(); // 배열을 뒤집어서
      return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
    } else { // 마지막 숫자가 0이 아니면
      numberToArray.reverse(); // 배열을 뒤집고
      return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
    }
  }
}

풀이과정 2

풀이과정 1과 로직은 비슷하나 쓸모없는 단계를 줄였다.
Number() 메서드는 string중 ' - ' 뒤에 0이 나와도 number로 만들어준다는 것을 알고 x의 끝자리가 0일 경우의 수를 코드에서 제외했다.

const y = '--003241'
console.log(Number(y)) // output : -3241

const reverse = x => {
  const numberToString = String(x); //x를 문자열로 변환
  const numberToArray = numberToString.split(""); //배열로 변환
  if (numberToArray[0] === '-') { // x가 음수일때
    numberToArray.reverse(); //배열을 뒤집고
    numberToArray.pop(); //뒤에 있는 '-'을 빼주고
    numberToArray.unshift('-') // 앞에 '-'을 더해주고
  } else  // x가 양수일때{}
    numberToArray.reverse(); //배열을 뒤집고
  return answer = Number(numberToArray.join("")); //문자열로 만든다음에 넘버로 만든다.
}

#4 문제

숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자 return: true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어, num = 123 return false => 뒤집은 모양이 321 이기 때문
num = 1221 return true => 뒤집은 모양이 1221 이기 때문
num = -121 return false => 뒤집은 모양이 121- 이기 때문
num = 10 return false => 뒤집은 모양이 01 이기 때문

풀이과정

매개변수인 num의 문자열num을 뒤집은 문자열을 비교하여 true, false를 리턴했다.
#2와 동일한 메서드를 활용해 풀이했음

  const sameReverse = num => {
  reverse = String(num).split('').reverse().join('');
  strNumber = String(num);
  if (reverse === strNumber) {
    return true
  } else {
    return false
  }
}

메서드 정리

  • String(): string 객체 생성 (원시 string과 다르게 type이 object)

  • .split(): string 객체를 지정한 구분자 ()안 내용으로 나눠 배열에 담음

  • .substr(): string에서 특정 위치에서 시작하여 특정 문자수 만큼의 문자들을 반환

    	const str = 'mozila'
    	console.log(str.substr(1, 2));	// output : "oz"
    	console.log(str.substr(-1);	// output : "a"
  • .pop(): 배열에서 마지막 요소를 제거하고 그 요소를 반환

    	const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
    
    	console.log(plants.pop());	// output: "tomato"
    
    	console.log(plants);	// output: Array ["broccoli", "cauliflower", "cabbage", "kale"]
  • .reverse(): 배열의 순서를 반전

  • .unshift(): 새로운 요소를 배열의 맨 앞쪽에 추가하고, 새로운 길이를 반환

    const array1 = [1, 2, 3];
    
    console.log(array1.unshift(4, 5));	// output: 5
    console.log(array1);	// output: Array [4, 5, 1, 2, 3]
    
  • Number(value): 문자열이나 다른 값을 Number 타입으로 변환, 숫자로 변환하지 못하면 NaN 리턴

  • .join(): 배열의 모든 요소를 구분자로 연결해 하나의 문자열로 만듬

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

1개의 댓글

comment-user-thumbnail
2022년 9월 2일

많은 깨우침 얻어갑니다.

답글 달기