회문 문자열
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력
하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
▣ 입력설명
첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
▣ 출력설명
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
▣ 입력예제 1
gooG
▣ 출력예제 1
YES
<!--my solution-->
<html>
<head>
<meta charset="UTF-8">
<title>출력결과 - 섹션3-1 - 회문 문자열</title>
</head>
<body>
<script>
function solution(str) {
//대소문자 구분없이 거꾸로 읽었을 때 똑바로 읽었을 때 같은 문자열을 회문 문자열이라고 한다.
let answer = str;
let arr = Array.from(answer);
let n = arr.length;
let arr1 = [...arr]; // 디스트럭쳐링 할당
console.log("arr:::", arr);
arr1.reverse(); // 원본 배열 변경
for (let i = 0; i < n; i++) {
if(arr[i].toUpperCase() === arr1[i].toUpperCase()) {
return 'YES';
} else {
return "NO";
}
}
}
const str = "Gog";
console.log(solution(str));
</script>
</body>
</html>
잘나온다ㅇㅇ
깨달은 점은 reverse()메서드는 원본 배열을 변경시킨다는 점이다.
<!--teacher's solution-->
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer="YES";
s=s.toLowerCase();
let len=s.length;
for(let i=0; i<Math.floor(len/2); i++){
if(s[i]!=s[len-i-1]) return "NO";
}
return answer;
}
let str="goooG";
console.log(solution(str));
</script>
</body>
</html>
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer="YES";
s=s.toLowerCase();
if(s.split('').reverse().join('')!=s) return "NO";
return answer;
}
let str="gooG";
console.log(solution(str));
</script>
</body>
</html>
코드 비교 : 첫번째는 나와 완전 다른 방식으로 풀었고, 두번쨰의 경우 reverse 메서드 뒤에 join을 붙여 뭔가 다르게 동작하게 한 점이다. 내가 아는 join 메서드의 역할은 배열에서 뭔가를 제거할 때 사용하는 것으로 알고 있다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/join
join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다. 이때가지 join.(' '); 만 써서 제거하는 건줄 알았는데 아니었다.
문자열로 변경시키는 함수였는데 나는 구조분해 할당을 사용해서 풀었다.