❓ 회문 문자열을 찾아라
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력 하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
▣ 입력설명
첫 줄에 정수 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
▣ 출력설명
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
▣ 입력예제 1 gooG
▣ 출력예제 1 YES
💡 문제 풀이
1. for문을 이용해서 결과 도출
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 = "gosoG";
console.log(solution(str));
1. 문자를 비교하는데 대소문자 구분하지 않는다고 되어있으니 문자열을 모두 소문자로 바꿔줍니다. toLowerCase()
2. for문을 돌기 위해 길이를 구해야하는데, 문자열의 길이가 짝수면 /2 만 해주면되고, 홀수일 경우 /2를 해주면 소수점이 생기니(안해도 상관은 없습니다.) Math.floor()를 사용하여 정수로 만들어줍니다.
3. 첫번째와 마지막, 두번째와 마지막에서 하나 앞 ... 이렇게 비교를 해줘야하기 때문에
기준은 s.[i]로 하고 비교대상은 s[문자열길이 - i - 1]로 설정해 같지 않으면 NO로 return 시켜줍니다.
2. reverse를 이용하여 결과 도출
function solution(s) {
let answer = "YES";
s = s.toLowerCase();
// split을 하는 이유는 배열이 되어야 reverse를 사용할 수 있기때문
if (s.split('').reverse().join('') !== s) return "NO"
return answer;
}
let str = "goot";
console.log(solution(str));
1. 문자열을 모두 소문자로 만들어줍니다.
2. 받은 문자열을 먼저 배열로 만들어 주기 위해 split('')을 적용해줍니다. reverse메소드는 배열이여만 사용할 수 있습니다.
3. reverse() 메소드는 배열의 순서를 반전합니다. 만약 ['a', 'b', 'c', 'd']라는 배열이 있다면 ['d', 'c', 'b', 'a']로 변환시켜줍니다.
4.join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다. 그리고 기존의 문자열 s와 비교해서 같지않으면 NO를 return 시켜줍니다.
'Front-End > Algorithm' 카테고리의 다른 글
[알고리즘] 숫자만 추출하기 (0) | 2021.05.20 |
---|---|
[알고리즘] 유효한 팰린드롬 (0) | 2021.05.20 |
[알고리즘] flag변수를 이용한 봉우리 개수 구하기 (0) | 2021.05.18 |
[알고리즘]격자판 최대합 구하기 (0) | 2021.05.14 |
[알고리즘]등수 구하기 (0) | 2021.05.14 |
댓글