오늘 아침에 위워크 건물에서 불이 나서 정신없이 아까운 시간만 보내고 집에 돌아왔다. 밀린 과제와 Flipped Learning을 하다보니 어느새 두번째 코드카타 시간..
오늘은 혼자 풀어봤다.
<문제>
reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return 해주세요. (x: 숫자, return: 뒤집어진 숫자를 반환!)
예시)
x: 1234 => return: 4321
x: -1234 => return: -4321
x: 1230 => return: 321
코드카타는 이제 이틀째긴 하지만 레플릿 풀 때부터 항상 문제를 읽고 나면 머리가 멍해서 뭐부터 시작해야 될지 모르겠다.
머리를 굴려보다 구글의 힘을 빌어 힌트를 얻고 풀기 시작했다.
처음에 머리 속으로 잡아본 전체적인 흐름은
우선 인자를 string 으로 변환하고,
for문을 돌려서 빈 배열에 숫자를 unshift로 넣는 거였다.
(push를 사용하면 순서가 그대로 이니까)
단순하게 양수만 생각하고 만든 후 테스트했더니 성공해서 금방 끝난 줄 알았지만.. 이렇게 쉬울 리가 없다.
// 1차 시도 실패
const reverse = x => {
let aa = x.toString()
let bb = [];
for (i = 0; i < aa.length; i++) {
bb.unshift(aa[i]);
}
return Number(bb.join(''))
}
// 인자가 음수일 때는 제대로 된 결과를 반환하지 못했다.
음수를 넣었을 때도 작동해야 하니 다른 메소드도 찾아보고, 더 고민해봤다.
주된 고민은 인자가 음수일 때 '-'는 그대로 가져오면서 나머지 숫자들은 순서가 바뀌는 것과 마지막 반환 값의 데이터 타입이 숫자여야 한다는 것이었다.
먼저 인자를 string 으로 변환 후(aa)
한 글자씩 잘라서 배열에 넣어뒀다.(bb)
빈 배열을 하나 만들어두고,(result)
1) 인자를 잘라서 넣어둔 배열(bb)의 첫 요소가 '-'가 아닌 경우에는
for 문을 이용해 요소들의 순서를 바꾸고, 붙여서 숫자로 반환한다.
2) 인자를 잘라서 넣어둔 배열(bb)의 첫 요소가 '-'인 경우에는 음수이므로
for문을 0이 아닌 1부터 돌면서, 인덱스 1부터 요소들을 빈 배열(result)에 다 넣고 순서를 바꾸고, 붙여서 문자열로 변환한다.
그 이후에 다시 인덱스 0의 숫자와 붙인 후 숫자로 변환 후 반환한다.
// 2차 시도 성공!
const reverse = x => {
let aa = x.toString();
let bb = aa.split('');
let result = [];
if (bb[0] !== '-') {
for (i=0; i<bb.length;i++) {
return parseInt(bb.reverse().join(''));
}
} else if (bb[0] === '-') {
for (j=1; j<bb.length; j++) {
result.push(bb[j])
} return parseInt(bb[0] + result.reverse().join('').toString());
}
}
아직 내 코드는 뭔가 이것 저것 덕지덕지 붙어있고, 깔끔하지 못해서 만족스럽지는 않다. 하지만 혼자 고민해보면서 풀었다는 데 의의를 두고, 다양한 방식을 더 쉽게 떠올리고, 코드로 칠 수 있도록 꾸준히 연습해야겠다.