알고리즘
문자열.회문문자열
ultramancode
2023. 1. 12. 01:30
7. 회문 문자열
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
gooG
예시 출력 1
YES
📌 첫번째 방법
len/2만큼 for문 돌면서 charAt(i)와 charAt(len-1-i) 비교
import java.util.Scanner;
class Main {
public String solution(String str) {
//GOOG로 예를 들면 0123임. length를 2로 나눠서 몫 부분보다 적게 i가 돌아야됨
//i는 인덱스니까 하나 적으니 그냥 i<length/2 해도 될듯.. 위의 예시로 치면 GO만 알면 G랑 G, O랑 O 비교 가능하니
//즉 0번째인덱스와 3번째 인덱스, 1번째와 2번째인덱스 같은지 보면 되니까 절반만 알면됨
//인덱스니까 렝스/2의 몫보다 작아도 딱 절반 ex) 길이 4니까 2고 i는 0부터 도니까 i<length/2하면 0,1까지 돌테니
//홀수도 마찬가지! 몫도 /2 한 걸로! stuts의 경우 가운데는 혼자니 비교 안해도 되니 st만 비교하면 됨
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 - 1 - i)) {//i는 앞으로 len-1은 뒤로 전진!!!!
answer = "NO";
}
}
return answer;
}
public static void main (String[]args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}
📌 2번째 방법
StringBuilder().reverse().toString()와 str이 일치하는지 equalsIgnoreCase()로 비교
import java.util.Scanner;
class Main {
public String solution(String str) {
String answer = "NO";
String tmp = new StringBuilder(str).reverse().toString();
if(str.equalsIgnoreCase(tmp)) answer = "YES";
//그냥 equals로 하면 대소문자 구분 못하니 equalsIgnoreCase -> 대소문자 구분 안함
return answer;
}
public static void main (String[]args){
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(T.solution(str));
}
}