본문 바로가기

Java/Java 알고리즘 인프런

[Ch.01 - String] 07. 회문 문자열 (+ str.equalsIgnoreCase(tmp))

반응형
7. 회문 문자열
 

설명

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

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

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

입력

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

출력

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

 

예시 입력 1 

gooG

예시 출력 1

YES

import java.util.Scanner;

public class Main {
	public String solution(String str) {
		String answer = "YES";
		String tmp = "";
		StringBuilder sb = new StringBuilder();
		
//		//1. 문자열을 모두 대문자로 변경
//		char[] arr = str.toCharArray();
//		for(int i=0;i<str.length();i++) {
//			arr[i]=Character.toUpperCase(str.charAt(i)); 
//		}
//		str=String.valueOf(arr);
		
		//1. 문자열을 모두 대문자로 변경
		str=str.toUpperCase();

		//2. 회문문자열을 구하기
		
		tmp = sb.append(str).reverse().toString();
		
		//3. 회문문자열과 문자열이 같은지 확인
		if (tmp.equals(str))
			return answer;
		else
			return answer = "NO";

	}

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

 

str.toLowerCase()

: 소문자로 바꾸는 메서드

str.equals(str2)

: 문자열비교 메서드

 

-> 대소문자 구분않고 비교하는 메서드

:str.equalsIgnoreCase(tmp)

 

 

+) 세련된 풀이

1. StringBuilder 이용

import java.util.Scanner;

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

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

 

 

2. 이분탐색으로 직접 확인

	for(int i=0;i<len/2;i++) {
			if(str.charAt(i)!=str.charAt(len-i-1)) return answer="NO";
		}

 

import java.util.Scanner;

public class Main {
	public 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 answer="NO";
		}
		return answer;
	}

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

 

3. substring 이용

: 짝수일때 홀수일때 구분

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String str=in.next();
    String nstr="";
    for(char c:str.toCharArray()){
      if(Character.isUpperCase(c)) c=Character.toLowerCase(c);
      nstr+=c;
    }
    String answer="";
    if(str.length()%2==0){
    StringBuilder sb=new StringBuilder();
    String reverse=sb.append(nstr.substring(nstr.length()/2)).reverse().toString();
    //System.out.println(nstr.substring(0,nstr.length()/2)+" "+reverse);
    
     answer=nstr.substring(0,nstr.length()/2).equals(reverse)?"YES":"NO";
    }else{
    StringBuilder sb=new StringBuilder();
    String reverse=sb.append(nstr.substring(nstr.length()/2+1)).reverse().toString();
    //System.out.println(nstr.substring(0,nstr.length()/2)+" "+reverse);
    
     answer=nstr.substring(0,nstr.length()/2).equals(reverse)?"YES":"NO";
    }
    System.out.println(answer);
  }
}
반응형