[CodeKata] reverse 함수 구현하기
문제
reverse 함수에 정수인 숫자를 인자로 받는다. 그 숫자를 뒤집어서 return 해주세요.
1. 인자로 1234 숫자가 들어왔다면 4321이라는 숫자를 반환해야 한다.
2. 인자로 -1234 숫자가 들어왔다면 -4321이라는 숫자를 반환해야 한다.
3. 인자로 1230 숫자가 들어왔다면 321이라는 숫자를 반환해야 한다.
풀이
짝이랑 진행한 코드
function reverse(nums) {
let numToString = nums.toString(); // 숫자를 문자열로
let arr = numToString.split(''); // 문자열을 배열로
let arrReverse = arr.reverse(); // 배열을 거꾸로
if(arrReverse.includes('-')) {
return -parseInt(arrReverse.join(''));
} else {
return parseInt(arrReverse.join(''));
}
}
순서를 반전할 수 있는 메서드가 있는지 찾다가 reverse()를 알게 되었고 배열로 만드는 과정과 다시 숫자로 돌리는 과정을 고민했던 것 같다.
Object.prototype.toString() : 문자열을 반환하는 Object의 대표적인 방법
String.prototype.split() : String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나누어 배열로 반환한다.
Array.prototype.reverse() : 배열의 순서를 반전한 결과를 반환
Array.prototype.includes() : 배열이 특정 요소를 포함하고 있는지 판별하여 true, false 반환
Array.prototype.join() : 배열의 모든 요소를 연결해 하나의 문자열로 만든다.
parseInt() : 문자열 인자를 파싱하여 특정 진수의 정수를 반환
리팩토링
const reverse = (nums) => {
let arrReverse = nums.toString().split('').reverse();
const result = arrReverse.includes('-')
? parseInt(arrReverse.join('')) * -1
: parseInt(arrReverse.join(''));
return result;
}
메서드를 검색하다가 알게 된 사실
열심히 만들어낸 결과가 MDN에 똑같이 있었는데 효과적인 방법이 아니라고 적혀있다. 왜냐하면 문자열에 grapheme clusters가 있을 경우, 유니코드 플래그를 설정해도 오류를 일으킨다고 한다.
같은 33기분 조언으로 만든 코드
let negative = 1;
const reverse = (nums) => {
let result = 0;
if (nums < 0) {
negative = -1
nums = -nums;
}
while(nums) {
result = (nums%10) + (result*10);
nums = Math.floor(nums/10);
}
return negative * result;
}
백엔드 공부를 하고 계신 분에게 조언을 구했는데 몫과 나머지를 이용해서 숫자를 반전시킬 수 있다고 하셔서 작성하게 된 코드이다. 설명을 듣고 머리를 맞은 기분이었는데 이런게 바로 컴퓨팅사고, 알고리즘을 푸는 자세구나 싶었다. 문제를 풀면서 쓸만한 메서드가 없을까 생각만 했던 반면에 이 문제를 수학적으로 접근할 수 있었다는게 놀라웠던 문제였다.
'⭐️ Memory > 교육수강 회고' 카테고리의 다른 글
[CodeKata] sameReverse 함수 구현하기 (0) | 2022.05.12 |
---|---|
[CodeKata] getLengthOfStr 함수 구현하기 (0) | 2022.05.11 |
[CodeKata] twoSum 함수 구현하기 (0) | 2022.05.09 |
위코드 2주차 회고 - 위스타그램 (Vanilla JS) (0) | 2022.05.07 |
위코드 1주차 회고 - 절대적 학습량 (0) | 2022.05.02 |
댓글
이 글 공유하기
다른 글
-
[CodeKata] sameReverse 함수 구현하기
[CodeKata] sameReverse 함수 구현하기
2022.05.12 -
[CodeKata] getLengthOfStr 함수 구현하기
[CodeKata] getLengthOfStr 함수 구현하기
2022.05.11 -
[CodeKata] twoSum 함수 구현하기
[CodeKata] twoSum 함수 구현하기
2022.05.09 -
위코드 2주차 회고 - 위스타그램 (Vanilla JS)
위코드 2주차 회고 - 위스타그램 (Vanilla JS)
2022.05.07