문제 링크
문제 요구 조건
문제는 숫자가
Panlindrome
숫자인지 판별하는 문제이다. Panlindrome 숫자란 중앙에서 부터 양끝으로 대칭이 되는 숫자를 말한다. 입력값은 number이고 반환값은 boolean이 되면 된다.
나의 문제 풀이
결론적으로 문제를 30분내에 풀지 못했다. 계속 왜 안되지하고 생각했었는데, 변수를 잘못 넣어서 안된 것이었다. ㅠ 코드는 다음과 같다.
나의 문제풀이
/** * @param {number} x * @return {boolean} */ var isPalindrome = function (x) { if (x < 0) return false; const j = x.toString(); for (let i = 0; i < x.length; i++) { const p = j.length - i - 1; if (i > x.length / 2) break; if (x[i] !== x[p]) { return false; } } return true; };
- x가 음수라면
panlindrome
이 성립하지 못하므로 제일 처음에 반환했다.
- 그리고 문자열로 변환
- 숫자의 길이를 체크하고 i가 커질수록 제일 마지막 인덱스에서 점차 작아지는 인덱스 j를 정의한다.
- length의 반을 순회하면 for문을 빠져 나온다.
- 검증중에 두 숫자가 다르다면 바로 false를 리턴
피드백
로직은 맞는 거 같은데, 변수를 잘못 연결해서 제대로 동작하지 않았다.
정답 문제 풀이
정답을 보면 일단 로직의 방향성은 맞았구나라고 생각한다. 하지만 이번 기회에 배울수 있었던 것은
- number는 length함수를 사용하지 못한다.
- length의 반만 순회하기 위해서 if 문을 넣는 것보다 for문에서 정리하면 깔끔하다
정답 문제 풀이
/** * @param {number} x * @return {boolean} */ var isPalindrome = function(x) { if (x < 0) return false; const s = x.toString(); // 변수명을 s (string)로 변경하여 가독성 향상 const len = s.length; // 반복문은 문자열 길이의 절반만 돌면 됩니다. for (let i = 0; i < len / 2; i++) { // s[i] : 앞에서부터 i번째 글자 // s[len - 1 - i] : 뒤에서부터 i번째 글자 if (s[i] !== s[len - 1 - i]) { return false; // 하나라도 다르면 즉시 false 반환 } } return true; // 반복문이 문제 없이 끝나면 true };