[코딩테스트] 👀 9. Palindrome Number

김수연·2022년 9월 11일
0
post-thumbnail
  • x로 넘겨 받은 수가 거꾸로 해도 처음과 같은 수인지 확인하는 코드

# 내가 푼 방법

var isPalindrome = function(x) {
  
	let strX = String(x).split(''); 
	let reverseX = [...strX].reverse();
  
	if(strX.toString() == reverseX.toString()){
		return true;
	} else {
		return false;
	}
};

console.log(isPalindrome(121121)); // true
  • String()과 split() toString()의 사용으로 필요없는 과정을 반복해서 하고 있음
  • 게다가 배열로 만드는 과정에서 기존 배열과 reverse된 배열의 비교가 어려워짐(참조 값은 단순비교하면 기대한 값과 다를 수 있음)

# 재귀, substring

var isPalindrome = function(x){
	const s = x.toString();
	if(s.length == 1){
		return true;
	}

	const start = s[0];
	const end = s[s.length-1];

	if(start != end){
		return false;
	}

	if(s.length == 2){
		return true;
	}

	const subStr = s.substring(1, s.length-1);
	return isPalindrome(subStr);
}

console.log(isPalindrome(123321)); // true;
  • 본격적인 비교를 하기 전에 문자열의 길이로 1차 비교:
    길이가 1 - 참
    길이가 2이상, 첫요소와 마지막 요소(마주보는 요소)의 값이 다른 경우 - 거짓
    길이가 2, 첫요소 == 마지막 요소 - 참

  • 비교가 끝난 양끝 요소를 잘라내고 남은 문자열을 재귀로 다시 확인

  • 더이상 평가할 요소가 없을 때까지 재귀를 한 후 return

  • return된 값을 출력해보면 123321은 true;


👀 개선점

모든 값을 비교하겠다! => 문자열의 길이, 양끝의 값 비교로 1차 걸러내기

string을 배열로 만들기 => substring으로 원하는 부분을 잘라내기

for 반복문으로 끝까지 확인 => 재귀하면서 코드 재사용 => 걸러내는 과정을 반복하면서 효율이 오름

profile
길을 찾고 싶은 코린이 of 코린이

0개의 댓글