코딩테스트 with JS/자바스크립트 알고리즘 문제풀이(인프런)
유효한 팰린드롬
5_hyun
2022. 8. 14. 00:16
반응형
해결법
-내 생각(비효율적 + 틀림)
나는 문자를 반으로 잘라서 뒤에 자른 문자는 다시 뒤집어서 푸는걸 생각했다. 틀렸지만 여러 함수를 배웠으니 정리하려고 한다.
내 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = "YES";
s = s.toLowerCase();
s = s.replace(/,|:|;/g, "");
let len = s.length;
let tmp = "";
if (len % 2 === 0) {
tmp = s.slice(Math.floor(len / 2), len);
s = s.slice(0, Math.floor(len / 2));
} else {
tmp = s.slice(Math.floor(len / 2) + 1, len);
s = s.slice(0, Math.floor(len / 2));
}
tmp = Array.from(tmp);
tmp = tmp.reverse().join("").trim();
if (s !== tmp) {
answer = "NO";
}
return answer;
}
let str = "found7, time: study; Yduts; emit, 7Dnuof";
console.log(solution(str));
</script>
</body>
</html>
정규 표현식을 사용했다.
그리고 문자열을 배열로 만들려면 Array.from(s) 이렇게 사용해야 한다.
해결법
-강사님 풀이
이걸 통째로 뒤집어서 원본과 비교한다. 내 풀이에 비해서 굉장이 단순하다.
강사님 풀이
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = "YES";
s = s.toLowerCase().replace(/[^a-z]/g, "");
let tmp = s.split("").reverse().join("");
if (s !== tmp) answer = "No";
return answer;
}
let str = "found7, time: study; Yduts; emit, 7Dnuof";
console.log(solution(str));
</script>
</body>
</html>
정규 표현식은 a-z가 아닌 문자를 다 없앤다는 의미이다. 그리고 문자열에서 배열로 만든는 것도 split로 간단하게 했다.
반응형