본문 바로가기
Front-End/Algorithm

[알고리즘] 회문 문자열

by 민바이민 2021. 5. 18.

❓ 회문 문자열을 찾아라

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "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 시켜줍니다.

댓글