📌강의 정리
회문문자열은 앞으로 읽으나 뒤로 읽으나 같은 문자열을 의미한다.
그러므로 처음에 투어퍼케이스나 로우케이스로 다 바꿔주면 된다.
i가0번일때 3번과 비교하고 1번일때 2번과 비교한다.
따라서 이 방법을 쓸때 전체길이의 절반만 쓰면된다.
문자열의 길이가 홀수 일때도 전체길이의 절반만 돌면된다.
먼저 예스 또는 노로 받으므로 앤서에 처음 예스를 준다.
그 이후 로우케이스로 다 소문자로 바꿔주고 길이를 구해준다.
길이변수는 len으로 이름지어준다.
홀수여도 소수라 상관은 없지만 Math.floor를 해주면 더욱 정확히 할 수 있다.
반복문내에서 이프문으로 초기값과 나중값을 비교한다. 나중값은 len-i-1로 해주면된다.
반복문을 돌며 한번이라도 다른값이 나오면 바로 노를 리턴하면된다.
또다른 방법으로는 리버스메서드를 사용하는 방법이 있다.
s.split('').reverse을 하면 문자가 하나씩 들어가고 그 배열을 거꾸로한 배열을 반환한다.
s.split('').reverse().join()
join()을 넣어주면 다시 문자열로 바꿔줄 수 있다. 이건 s를 바꿔준게 아니기 때문에 s와 비교를 하면 문자열 비교가 가능하다.
📌느낀점
문제는 나도 풀었지만 강사님은 나보다 반복을 절반만 돌면된다.
또한 강사님의 코드가 문제의 정의에 더욱 적합하다.
모든면에서 부족함이 느껴진다.
처음 생각할때부터 적게 반복하고 문제의 정의를 코드에 녹일줄 알아야한다.
//나의 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer="YES";
let a = '';
s = s.toLowerCase();
for(let i=0;i<s.length;i++){
a+=s[s.length-i-1]
}
if(a !== s) answer = "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();
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>
'JS 알고리즘 문제풀이 > 섹션 3. 문자열 탐색' 카테고리의 다른 글
5.문자열 압축 (0) | 2022.01.13 |
---|---|
4.가장 짧은 문자거리 (0) | 2022.01.13 |
3.숫자만 추출 (0) | 2022.01.13 |
2.유효한 팰린드롬 (0) | 2022.01.13 |