이번주부터 Code-Kata를 진행했다.
2~3인 1조로 소통하고 협력해서 하루에 한 문제씩 해결하는 과제인데,
해당 문제를 파트너와 내가 각자 네비게이터 또는 드라이버를 맡아 주어진 문제를 풀어야 한다.
Code-kata는 단순히 협력해서 문제를 해결하는것뿐만 아니라,
아래는 이번주 내용 중 개인적으로 유레카(!)를 외쳤던 문제이다.
Day2, 문제는 간단하다.
reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자 , return: 뒤집어진 숫자를 반환!
ex)
x: 1234 | return: 4321
x: -1234 | return: -4321
x: 1230 | return: 321
처음 문제를 보고 떠올린 로직은
1) 받은 숫자 x를 string화하고, split으로 한 문자씩 쪼개 배열에 집어넣는다
2) reverse(); 메소드를 이용해 뒤집는다
3) if문을 이용해
3-1) '-'를 포함한다면, for 문을 돌려서 새로운 배열에 집어넣고 int값으로 return
3-2) 포함하지 않는다면, 다시 if문으로 0을 포함한다면....
위와 같은 방식으로 로직을 떠올리고 코드를 써내려갔는데
하다보니 for문과 if문이 계속해서 등장하고... 여기서 뭔가 잘못되어간다는걸 느꼈다
로직이 비효율적이고, 가독성이 떨어졌다.
그래서 고민하던 중,
동기가 준 아이디어로 굉장히 간결하고 간단하게 나타내는 방법을 알게되었다.
const reverse = x => {
let arr = String(x).split("");
arr.reverse();
if(arr.includes('-')){
const x = arr.pop();
arr.unshift(x);
}
return parseInt(arr.join(''));
}
module.exports = { reverse };
1) 받은 숫자 x를 string화하고, split으로 한 문자씩 쪼개 배열에 집어넣는다
2) reverse(); 메소드를 이용해 뒤집는다
3) if문을 이용해 '-'를 포함한다면,
변수 x에 .pop();으로 배열의 맨 끝 값을 삭제하고,
.unshift();으로 배열의 맨 앞에 값을 추가한다.
4) return 값으로 parseInt()를 이용해 데이터타입을 변경하고,
.join('')을 이용해 배열들을 붙이면 된다.
parseInt() 를 사용했으므로 x값이 1230이면 0321, 즉 321로 리턴할 수 있게 된다. (물론 나머지 케이스도 구현 가능!)
20줄 이상의 코드가 단 몇줄로 구현이 가능한 것을 보면서 신기했고,
좋은 코드를 짜는것의 중요성을 느꼈다 (물론 코드에는 정답이 없다 ~~)
크크 다음주 코드카타도 파이팅 ~ !!! 🙌