[Algorithm] 회문 문자열

19·2022년 10월 14일
0

Algorithm

목록 보기
18/28
post-custom-banner

회문 문자열

설명

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.

입력

첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.

출력

첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.

예시 입력 1

gooG

예시 출력 1

YES



해결

public class StringEx_7 {
    public String solution(String str) {
        String answer = "YES";
        // String -> char 배열, 하나씩 순회하며 회문 체크
//        char[] chars = str.toUpperCase().toCharArray();
//        int lt=0, rt=chars.length-1;
//        while (lt < rt) {
//            // 회문이 아닌 경우 체크
//            if (chars[lt] != chars[rt]) {
//                answer = "NO";
//                break;
//            }
//            lt++;
//            rt--;
//        }

        // String의 길이를 구하고, charAt을 통해 반대짝과 비교하며 회문 체크
//        str = str.toUpperCase();
//        int len = str.length();
//        for (int i=0; i<len/2; i++) {
//            // 회문이 아닌 경우
//            if (str.charAt(i) != str.charAt(len-1-i)) {
//                answer = "NO";
//                break;
//            }
//        }

        // StringBuilder로 reverse한 후, 두 문장을 비교해 회문 체크
        String tmp = new StringBuilder(str).reverse().toString();
        if (!str.equalsIgnoreCase(tmp)) {
            answer = "NO";
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {
        StringEx_7 T = new StringEx_7();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        System.out.println(T.solution(str));
    }
}
  • 다양한 방식으로 회문을 체크할 수 있었다.
    • String을 char 배열로 변환하고 인덱스를 통해 비교하며 회문을 체크했다.
    • String의 길이를 구하고 charAt을 통해 반대편과 비교하며 회문을 체크했다.
    • StringBuilder를 통해 문장을 뒤집고, 두 문장을 비교해 회문을 체크했다.

대충 어떻게 풀어야하지?를 생각하며 시간을 보내는거보단 자그마한 예시를 들어가며 차근차근 생각해보는 게 더 좋은거 같다.

profile
하나씩 차근차근
post-custom-banner

0개의 댓글