코드카타 시간을 통해 알고리즘을 공부하고 기본기를 다져보자~
week1 #2, #4는 비슷한 메서드를 사용하므로 같이 리뷰를 해보겠다.
reverse 함수에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return해주세요.
x: 숫자 return: 뒤집어진 숫자를 반환!
예들 들어, x: 1234 return: 432
x: -1234 return: -4321
x: 1230 return: 321
x가 양수, 음수, 끝자리가 0일 경우, 끝자리가 0이 아닐 경우 총 4개의 경우의 수로 생각하고 아래와 같이 작성
const reverse = x => {
const numberToString = String(x); // x를 문자열로 변환
const numberToArray = numberToString.split(""); // x문자열을 배열로 변환
const lastZeroNumber = (numberToString.substr(-1)); // 마지막 숫자 뽑음, 0 확인용
if (numberToArray[0] === '-') { // x가 음수일때
if (lastZeroNumber === 0) { // 마지막 숫자가 0이면
numberToArray.pop(); // x배열에서 마지막 인덱스인 0을 빼고
numberToArray.reverse(); // 배열을 뒤집어서
numberToArray.pop(); // 뒤에 있는 '-'을 빼주고
numberToArray.unshift('-') // 앞에 '-'을 더해주고
return answer = Number(numberToArray.join("")); // 문자열로 붙여서 만들고 다시 넘버로 만든다.
} else { // 마지막 숫자가 0이 아니면
numberToArray.reverse(); // x배열을 뒤집고
numberToArray.pop(); // 뒤에 있는 '-'을 빼주고
numberToArray.unshift('-') // 앞에 '-'을 더해주고
return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
}
} else { // x가 양수일때
if (lastZeroNumber === 0) { //마지막 숫자가 0이면
numberToArray.pop(); // 배열로 만든거에서 0을 빼고
numberToArray.reverse(); // 배열을 뒤집어서
return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
} else { // 마지막 숫자가 0이 아니면
numberToArray.reverse(); // 배열을 뒤집고
return answer = Number(numberToArray.join("")); // 문자열로 만든 다음에 넘버로 만든다.
}
}
}
풀이과정 1과 로직은 비슷하나 쓸모없는 단계를 줄였다.
Number()
메서드는 string중 ' - ' 뒤에 0이 나와도 number로 만들어준다는 것을 알고 x의 끝자리가 0일 경우의 수를 코드에서 제외했다.
const y = '--003241'
console.log(Number(y)) // output : -3241
const reverse = x => {
const numberToString = String(x); //x를 문자열로 변환
const numberToArray = numberToString.split(""); //배열로 변환
if (numberToArray[0] === '-') { // x가 음수일때
numberToArray.reverse(); //배열을 뒤집고
numberToArray.pop(); //뒤에 있는 '-'을 빼주고
numberToArray.unshift('-') // 앞에 '-'을 더해주고
} else // x가 양수일때{}
numberToArray.reverse(); //배열을 뒤집고
return answer = Number(numberToArray.join("")); //문자열로 만든다음에 넘버로 만든다.
}
숫자인 num을 인자로 넘겨주면, 뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자 return: true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어, num = 123 return false => 뒤집은 모양이 321 이기 때문
num = 1221 return true => 뒤집은 모양이 1221 이기 때문
num = -121 return false => 뒤집은 모양이 121- 이기 때문
num = 10 return false => 뒤집은 모양이 01 이기 때문
매개변수인 num의 문자열
과 num을 뒤집은 문자열
을 비교하여 true, false를 리턴했다.
#2와 동일한 메서드를 활용해 풀이했음
const sameReverse = num => {
reverse = String(num).split('').reverse().join('');
strNumber = String(num);
if (reverse === strNumber) {
return true
} else {
return false
}
}
String()
: string 객체 생성 (원시 string과 다르게 type이 object)
.split()
: string 객체를 지정한 구분자 ()안 내용
으로 나눠 배열에 담음
.substr()
: string에서 특정 위치에서 시작하여 특정 문자수 만큼의 문자들을 반환
const str = 'mozila'
console.log(str.substr(1, 2)); // output : "oz"
console.log(str.substr(-1); // output : "a"
.pop()
: 배열에서 마지막 요소를 제거하고 그 요소를 반환
const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop()); // output: "tomato"
console.log(plants); // output: Array ["broccoli", "cauliflower", "cabbage", "kale"]
.reverse()
: 배열의 순서를 반전
.unshift()
: 새로운 요소를 배열의 맨 앞쪽에 추가하고, 새로운 길이를 반환
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5)); // output: 5
console.log(array1); // output: Array [4, 5, 1, 2, 3]
Number(value)
: 문자열이나 다른 값을 Number 타입으로 변환, 숫자로 변환하지 못하면 NaN 리턴
.join()
: 배열의 모든 요소를 구분자로 연결해 하나의 문자열로 만듬
많은 깨우침 얻어갑니다.