35_알고리즘
Q. reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환한다.
예들 들어,
x: 1234 → return: 4321
x: -1234 → return: -4321
x: 1230 → return: 321
- 논리 전개 방식
1) 숫자를 뒤집는다.
2) 인자값 < 0 이면 return 값에 -1을 곱한다.
찾아보니 number타입을 뒤집는 함수는 없었다.
그래서 1) 문자열로 변환
2) 각각의 글자를 배열로 변환
3) 순서 반전
4) 문자열로 재변환
5) 숫자로 변환하는 과정을 거치기로 했다.
참고: https://gocoding.tistory.com/153
const reverse = x => { let xString = x.toString(); let stringSplit = xString.split(''); let reversString = stringSplit.reverse(); let joinString = reversString.join(''); let xNumber = parseInt(joinString, 10); if (x > 0) { return xReverse; } else if(x < 0) { return xReverse * -1; } else { return 0; } }
팀원인 재현님은 reverse함수를 사용하지 않고 for문을 이용해 순서를 반전시켰다.
나는 만약 reverse함수가 없었다면, for문을 이용할 생각도 못했을 것이다.
그래서 아이디어와 코드를 익히고자 기록으로 남긴다.
const reverse = x => { let nums = x.toString(); let reverseNums = []; let index = 0; for(let i = nums.length-1; i > 0; i--) { reverseNums[index] = nums[i]; index++; } // for문을 활용한 순서 반전 let result = reverseNums.join(''); let numbers = parseInt(result); if(x > 0) { return numbers; } else if (x < 0) { return numbers * -1; } else { return 0; } }
정리를 마치고 끝내려는 순간, 코드를 한 줄로 짠 팀이 있다길래 코드를 받아왔다.
const reverse = x => { return x > 0 ? (parseInt(x.toString().split("").reverse().join(""))) : (-parseInt(x.toString().split("").reverse().join(""))); }
변수를 하나로 묶은 것까지는 예상했던 부분이라 그러려니 했는데,
삼항연산자에 응용한 것을 보면서 잘 짠 코드는 예술품처럼 아름다울 수도 있겠다는 생각이 들었다.
다만, 가독성면에서 아쉬움이 남았다.
그래서 코드를 리팩토링해봤다.
const reverse = x => { let xReverse = parseInt(x.toString().split('').reverse().join('')); return x > 0 ? xReverse : x === 0 ? 0 : xReverse * -1 }
가독성은 높였지만, 한 줄이었을 때의 놀라움은 느껴지지 않았다.
아쉬웠다.
- 결론
:: 가독성과 효율성은 상황에 맞춰서 쓰자. 가독성이 중요할 때도 있고, 효율성이 더 중요할 때도 있다.
:: 코드도 아름다울 수 있다.
Author And Source
이 문제에 관하여(35_알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@taekjun_s/35알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)