앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "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));
}
}
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() 메소드를 사용하는 것이 좋다.