Algorithm

[자바 알고리즘 문제풀이] String 07. 회문문자열

민뭉아치 2022. 3. 7. 00:38

String(스트링) 07.  회문문자열


* 사용 언어 : JAVA

* Inflearn의 자바(Java)알고리즘 문제풀이 : 코딩테스트 대비 강의내용 정리

 

1. 문제

앞 뒤로 읽을 때 같은 문자열인 회문 문자열을 받으면 Yes, 아니면 No를 출력하기
회문 문자열 검사시 대소문자 구분하지 않음
// 입력
gooG

// 출력
YES

 

2. 풀이

문자열의 첫 번째 인덱스부터 마지막 인덱스 len-1에서 i를 빼준 인덱스를 반복 비교하면 두 인덱스가 중간지점에서 만나게 된다. 
회문문자열이므로 비교한 두 문자가 같으면 그대로 answer을 반환하고 아니면 "NO"로 값을 변경 후 반환한다.

 

또 다른 방법은 전달받은 문자열을 StringBuilder의 reverse() 메서드를 사용하여 뒤집어준다.

원래 입력받은 문자열과 뒤집은 문자열을 equals()메서드로 비교하여 answer을 반환하고 아니면 NO로 값을 변경 후 반환한다.

equals() 메서드는 대소문자를 구분하니 미리 대문자 또는 소문자로 변환해준다. 

3. 코드 

public class Main {
    public String solution(String str) {
        String answer = "YES";
        str = str.toLowerCase();
        int len = str.length();
        for (int i = 0; i < len/2; i++) {
            if (str.charAt(i) != str.charAt(len-i-1)) return answer = "NO";
        }

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println(T.solution(str));
    }

}

 

public class Main {
    public String solution(String str) {
        String answer = "YES";
        str = str.toLowerCase();
        String reversStr = new StringBuilder(str).reverse().toString();
        if (!str.equals(reversStr)) return answer = "NO";

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println(T.solution(str));
    }

}

4. Keword

  • String
    • equals()
  • StringBuilder
    • reverse()