<회문 문자열>
: 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 한다. 문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 "NO"를 출력하는 프로그램을 작성한다. 단 회문을 검사할 때 대소문자를 구분하지 않는다.
- 대소문자는 구분하지 않는다고 하니, toLowerCase() 혹은 toUpperCase()를 이용해 소문자 혹은 대문자로 변경해준다.
- 특정 파라미터 값을 주지 않고 split('')을 쓰면, 문자열이 배열로 바뀐다. 이 바뀐 배열에 배열 함수인 reverse()를 써서 순서를 바꾸어 준 다음, join('')으로 배열을 다시 문자열로 만들어 준다.
- good이나 goaod이나 문자열의 길이는 다르나, 구해야 하는 방식은 똑같다. goaod일 경우엔, 중간꺼를 제외하고 서로 비교하면 되기 때문이다.
결국 good도 총 2번, goaod도 총 2번 구하면 된다. 이 말은 곧 for문으로 하나 하나씩 비교한다고 할 때, 돌리는 개수가 같다는 말이다.
! 정리
- split('') : 문자열을 배열로 바꿔줌
- join('') : 배열들을 문자열로 바꿔줌(합쳐서)
- reverse() : 배열을 역순으로 해줌
- 한 번 더 정리 : srj~ 문자열을 배열로 바꾼 후, 역순으로 한 다음, 다시 배열을 문자열로~ 이느낌 rjrj~
<script> //직접 비교 function solution(s){ let answer="YES"; //split로 배열로 만든 후 reverse로 돌린다음에 문자열로 다시 변경 s = s.toLowerCase(); if(s.split('').reverse().join('') !== s) return "No" return answer; } let str="gdooog"; console.log(solution(str)); </script>
<script> //문자열인데 신기하게 for문에서 인덱스번호로 접근이 가능하다! 마치 for..of때처럼!
function solution(s){
let answer="YES";
s = s.toLowerCase();
let len = s.length;
for(let i = 0; i < Math.floor(len/2); i++ ){ //다른 걸 확인한다!! 만약 다르면 바로 NO리턴, 같아서 다 통과하면 ANSWER리턴
if(s[i] !== s[len-i-1]) return "NO";
}
return answer;
}
let str="goooG";
console.log(solution(str));
</script>