3장은 문자열 탐색에 관련된 문제들이다.
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력 하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
[입력설명]
첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
[출력설명]
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
gooG
YES
방법1은 직접비교하는 방법이다.
(1) 소문자나 대문자로 문자열을 통일한 후,
(2) 비교한다. 이때, Math.floor(len/2)
를 통해 반복횟수를 정한다. 만약 일치하지 않는 것이 있다면 "NO"를 리턴하고 함수를 종료한다.(사진 참고)
(3) 일치한다면 for문을 빠져나와서 "YES"를 리턴한다.
<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"; //일치하지 않는 것이 있으면, "NO"리턴 후, 프로그램 종료
}
return answer; //"YES" 리턴
}
let str="goooG";
console.log(solution(str));
</script>
</body>
</html>
방법2는 reverse() 메소드를 사용한다.
(1) 소문자(대문자)로 문자열을 통일하고
(2) reverse()를 통해 문자열을 뒤집고, 원본과 같은지 비교한다. 다르다면 "NO"를 리턴한다.
(3) 같다면 if문을 빠져나와 answer="YES"를 그대로 리턴한다.
<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"; //빈문자열로 split 하면 문자 하나씩 배열의 원소가 됨. reverse()는 배열에서 사용 가능
return answer;
}
let str="goooG";
console.log(solution(str));
</script>
</body>
</html>
9/10
1. 일치하지 않는 것이 있다면, return "NO"를해서 남은 반복문 실행하지 않고 프로그램 종료한다.