📅 22.10.05
📖 파트너 : 모유진
문제설명 :
reverse함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return 해주세요
x: 숫자
return: 뒤집어진 숫자를 반환
- nums: 숫자 배열
- target: 두 수를 더해서 나올 수 있는 합계
- return: 두 수의 index를 가진 숫자 배열
예를 들어,
x: 1234
return: 4321
x: -1234
return: -4321
x: 1230
return: 321
처음에는 문자열로 받은 변수를 배열로 반환하는데 양의정수와 음의정수 처리를 생각할때 - 부호를 따로 관리하여 빼둔다음 마지막에 조건문을 사용해 배열을 합치는 방향으로 생각을 했다
const reverse = x => {
const array = x.toString().split("");
console.log(array);
const minus = array.filter((el) => el === "-");
console.log(minus);
if (minus.length === 1) {
array.shift();
array.reverse();
const newArray = minus.concat(array).join("");
return Number(newArray);
} else {
return Number(array.reverse().join(""));
}
}
이 코드를 짤 때 유의해야 할 점은
.split() 메서드는 sting 타입에서 사용하여야만 배열로 반환이 가능하다 그래서 toString()메서드를 먼저 써주어야한다filter메서드로 각각의 배열요소가 "-"가 일치하는지 확인해 일치하는 값을 배열로 반환해 변수 minus로 담아 주었다if(minus)를 true로 판단하지 않았다 값이 있는것은 truthy값으로 받아들여서 조건문을 충족할 줄 알았는데 아니었다.if(minus.lenght===1)로 배열길이 조건을 넣어 코드를 짰다shift()함수를 사용하여 부호를 빼냈고reverse()함수를 사용해 값을 거꾸로 바꿔준다newArray에 minus배열과 array배열을 concat으로 배열을 합치고 join("")으로 한문장으로 합친 값을 할당하고풀고 나서 조건문 부분이 너무 복잡해서 다른 방법을 생각해 보았다.
처음에는 - 부호라는 string으로 집착을 했었다면 애초에 변수 x 는 number 자료형이므로 그냥 숫자로 판단하면 간단한 문제였다.
전체적인 흐름은 비슷하나 음의 정수를 처리하는 방법을 달리 하였다.
const reverse = x => {
const str = x.toString().split("");
if (x < 0) {
str.shift();
return Number(str.reverse().join("")) * -1
} else {
return Number(str.reverse().join(""));
}
}
이 코드를 짤 때 유의해야 할 점은
reverse() 메서드는 배열에만 적용할 수 있는 메서드이다(숫자건 문자건). 일반적으로 우리는 하나의 문자열을 배열처럼 쓸 수 있지만 reverse 메서드는 그것이 불가능 하므로 필히 문자열도 split("")으로 각각의 요소를 배열로 반환한 다음 reverse 사용이 가능하다x<0 조건으로 판단하여 처리 하는 방법이다.-1 곱셈으로 연산처리 해주면 간단하다