1-7 회문 문자열

정우·2022년 9월 25일

✏ 문제


설명

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.

문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.

단 회문을 검사할 때 대소문자를 구분하지 않습니다.

입력

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

출력

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


✏ 코드

import java.util.Scanner;

class Main {
    public static String solution(String str) {
        String str1 = str.toUpperCase();
        String str2 = new StringBuilder(str1).reverse().toString();
        
        if (str1.equals(str2)) {
            return "YES";
        }
        else {
            return "NO";
        }
    }
    
	public static void main(String[] args) {
	    Scanner sc = new Scanner(System.in);
	    String str = sc.next();
	    System.out.println(solution(str));
	}
}

✏ 코드2(직접 구현)

package inflearnv2;
import java.util.*;

class problem7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        sc.close();
        solution(str);
    }

    public static void solution(String str) {
        /* 
        StringBuilder로 .reverse와 equals를 사용하는 방법말고 다른 풀이를 사용해보았다.
        팰린드롬은 앞에서 읽으나 뒤에서 읽으나 같은 문자이기 때문에
        주어진 문자열의 첫과 끝을 비교하며 시작한다. 둘이 다르면 애초에 팰린드롬이 될 수 없으니 바로 NO
        만약 같다면 포인터 두개를 사용해 하나는 문자열의 앞부터, 하나는 뒤쪽부터 따라오며 서로 비교를 한다
        모든 탐색을 마쳤다면 팰린드롬이기에 YES를 출력한다.
        ** 대소문자를 구분하지 않기때문에 우선 문자열을 LowerCase 혹은 UpperCase로 바꾸어주고 시작했다.
        */
        int lt = 0;
        int rt = str.length()-1;
        str = str.toLowerCase();
        String answer = "YES";

        while (lt < rt) {
            char start = str.charAt(lt);
            char end = str.charAt(rt);

            if (start != end) {
                answer = "NO";
                break;
            }
            lt++;
            rt--;
        }
        System.out.println(answer);
    }
}

정리

StringBuilder로 문자열을 만들면 .toString() 통해서 String으로 변환해주어야한다.

.reverse() : 문자열을 거꾸로 변환해준다

.equals() : 내용을 비교해서 true, false를 반환

==와의 차이는 ==는 주소값을 비교하지만 .equals는 내용을 비교하기 때문에 문자열의 경우 .equals() 메소드를 사용하는 것이 좋다.

profile
That's it

0개의 댓글