📙 1. 문제
Link : https://leetcode.com/problems/palindrome-number/description/
문제 설명
Given an integer x, return true if x is a palindrome, and false otherwise.
# palindrome : An integer is a palindrome when it reads the same forward and backward. For example, 121 is a palindrome while 123 is not.
제한 사항
- -2^31 <= x <= 2^31 - 1
풀이 1 : 짝수와 홀수 구분
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
let flag = true;
x=x+''
if((x.length)%2===0){ //길이가 짝수
for(let i=0;i<x.length/2;i++){ // 0,1
if(x[i]!==x[x.length-1-i]){
flag=false;
}
}
}else{
for(let i=0;i<x.length/2-1;i++){ // 0,1
if(x[i]!==x[x.length-1-i]){
flag=false;
}
}
}
return flag;
};
- 길이가 짝수인 경우와 홀수인 경우 각각 for문을 돌려서, 하나라도 대칭인 지점에 문자가 다르다면 flag=false로 바꾸어 false를 return하도록 구현하였다.
- 이 풀이의 시간 복잡도는 O(n)(n은 x의 길이)이다.
풀이 2 : 짝수와 홀수 구분 X
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
let flag = true;
x=x+''
for(let i=0;i<x.length/2;i++){
if(x[i]!==x[x.length-1-i]){
flag=false;
}
}
return flag;
};
- 길이가 홀수면 가운데 문자는 어차피 가운데 문자와 비교하기에 구분할 필요가 없다고 생각하여 구분을 없앴다. 코드가 훨씬 간결해짐을 느낄 수 있었다.
- 그런데 특이한 점은 두 번째 풀이가 Runtime과 Memory가 더 늘어났다는 점이다. 내 생각에는, 길이가 홀수인 경우 비교를 한 번씩 더해서 그런 거 같다.
풀이 3 : reverse()메소드 이용
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
const MinNum = -2147483648; //-2^31 값
const MaxNum = 2147483647; //2^31-1 값
if(x < MinNum || x > MaxNum) {
return false;
}
const reverse = x.toString().split("").reverse().join("");
return x === Number(reverse);
};
- 대칭이여서 JS의 reverse() 메소드를 떠올렸다.
- 숫자를 문자열로 변환 후, 뒤집어서 기존 메소드와 비교한다.
- 코드가 간단해지고, 직관적으로 바뀌었지만 문자열을 뒤집는 reverse()메소드를 사용했기에 Runtime이 늘어난 건 어쩔 수 없는 것 같다.
🤔 2. 느낀 점
한 문제를 푸는 데에 다양한 풀이가 있다.
🤩 3. 한 번 더 짚고 갈 점
- 짝수인 경우와 홀수인 경우를 구분하지 않아도 되는 지 체크하고 풀 것. 구분하지 않아도 된다면 -> 풀이가 훨씬 간결해짐 -> 실수가 줄어들고 시간이 단축됨
'코딩 테스트 > LeetCode' 카테고리의 다른 글
[4월 15일] container-with-most-water (1) | 2023.04.15 |
---|---|
[4월 14일] String to Integer (0) | 2023.04.14 |
[4월 11일] Reverse Integer (0) | 2023.04.11 |
[4월 7일] Longest Palindromic Substring (Bruth Force) (0) | 2023.04.07 |
[4월 6일] Longest Substring Without Repeating Characters (0) | 2023.04.06 |
[4월 6일] Add Two Numbers (0) | 2023.04.06 |
[4월 2일] Two Sum (0) | 2023.04.02 |