Java / / 2022. 11. 29. 14:35

[알고리즘/JAVA] String(문자열) - 회문 문자열

반응형

 

문제

문자열이 입력되고 해당 문자열이 회문 문자열이면 YES 출력하고, 회문 문자열이 아니면 NO 출력하는 프로그램을 작성하세요. (단, 회문을 검사할 때 대소문자를 구분하지 않는다.)

 

✔ 회문 문자열

  • 앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열 입니다.

입력

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

출력

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

 


Solution 1.

✨ 짝수, 홀수 상관없이 (길이/2)까지만 잘라서 양끝을 비교하면 된다.

 

g o | o d - (4/2)인 두 번째 char까지 잘라서 양끝을 비교한다.

s t | u | t s - (5/2)인 두번째 char까지 잘라서 양끝 비교하고, 홀수는 가운데는 하나뿐이므로 비교할 필요가 없다.

 

import java.util.Scanner;

class Main {

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

    private String solution(String str) {
        String answer = "YES";
        str=str.toUpperCase();//대소문자 구분 없이
        int len = str.length();
        for(int i=0; i<len/2; i++){
            if(str.charAt(i)!= str.charAt(len-i-1)) return "NO";
        }
        return answer;
    }
}

 

Solution 2.

✨ 입력 받은 문자열을 뒤집어서 기존의 문자열과 같은지 비교한다.

 

🌈 StringBuilder

  • String과 문자열을 더할 때 새로운 객체를 생성하지 않는다.
  • 기존의 데이터에 더하는 방식을 사용하기 때문에, 속도가 빠르며 상대적인 부하가 적다.
  • 또한 여러가지 함수를 사용할 수 있게 된다.

🌈 equalsIgnoreCase(string)

  • 대소문자 구분 없이 문자열 비교한다.
import java.util.Scanner;

class Main {

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

    private String solution(String str) {
        String answer = "NO";
        String tmp = new StringBuilder(str).reverse().toString();
        if(str.equalsIgnoreCase(tmp)) answer="YES";
        return answer;
    }
}

 

Solution 3.

 

🌈 reverse()

  • String클래스는 reverse()를 제공하지 않아 변환해서 reverse()를 사용해야 한다.
  • StringBuilder, StringBuffer, Collection클래스에서 reverse() 메서드를 제공한다.
  • String 문자열을 반전시키기 위해서는 위의 클래스로 변환해서 사용해야 한다.
import java.util.Locale;
import java.util.Scanner;


public class Main {

    public static void Solution(String str){
        
        str = str.toLowerCase(Locale.ROOT);

        StringBuilder builder = new StringBuilder(str).reverse();
        if(builder.toString().equals(str)){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }



    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String input = in.next();

        Solution(input);
    }
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유