reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
📌 예시
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321
먼저 인자로 받는 숫자의 위치를 반대로 바꾸려면, 숫자 하나하나를 string으로 만들고 반대 순서로 정렬해야했다.
따라서 우선 인자로 받는 숫자를 x라 하고,
1) toString()
으로 숫자 x를 string으로 만든 뒤
2) split
으로 자릿수마다 분리하고,
3) 분리된 값을 반대순서로 정렬하는 reverse()
함수를 사용했다.
4) 1~3의 과정을 하나의 코드로 작성해서, 반대 순서로 정렬된 각 분리된 숫자를 값으로 가지는 배열 a를 만들었다.
let a = x.toString().split("").reverse()
5) join()
메서드로 a 배열의 요소를 연결해 하나의 문자열로 만들었다.
이 문자열 값은 reverseA
라고 두었다.
let reverseA = a.join("")
문제의 예시를 보면, 0은 숫자의 앞자리로 올 때 사라져야 하고
-는 순서가 바뀌지 않고 반환된다. (ex. 1230 -> 321
, -1234 -> -4321
)
step 1까지의 과정을 완료하면 1234 > 4321
까지는 잘 나오지만, string인 관계로 1230 > 0321
, -1234 > 4321-
과 같이 나왔다. 0은 사라져야 하고.. -는 맨 앞에 나와야하고요..?
예상치못한 변수인 0과 -를 해결하기 위해 페어 분과 머리를 싸매고 고민하다가, if문을 활용해보자는 생각이 떠올랐다.
1) 0을 없애기 위해 parseInt(reverseA)
로 정수를 반환하고,
2) 음수값을 판별하기 위해 reverseA에 -가 존재하는지 조건문을 걸었다.
true일 경우 parseInt("-" + reverseA)
를 리턴, false이면 그냥 parseInt(reverseA)
를 반환
const reverse = x => {
let a = x.toString().split("").reverse()
let reverseA = a.join("")
if(reverseA.includes("-") === true) {
return parseInt("-" + reverseA)
} else {
return parseInt(reverseA)
}
}
그랬더니 짜잔~ 모든 테스트를 통과하는 정답이 나왔다!
페어분과 기쁜 마음으로 마무리
문제 해결을 위해 각각의 자리수를 배열로 변환하는 건 공통적으로 생각하고,
join메서드는 페어분이, includes메서드는 내가 생각해내며 핑퐁을 통해 문제를 해결했다. 함께 협업하며 문제를 해결해내 뿌듯하고 기억에 남는 경험! ✨
사고의 흐름을 보니 정리도 잘되고 좋은 것 같아요!
저도 알고리즘 하면서 많은 것을 얻어가기 위해 한 스텝 두 스텝! 정리 잘 해봐야겠습니다.
좋은 글 감사합니다!