ultra_dev
문자열.회문문자열 본문
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));
}
}
'알고리즘' 카테고리의 다른 글
문자열.문장 속 단어(indexOf(),substring()) (0) | 2023.01.12 |
---|---|
문자열.단어뒤집기 (0) | 2023.01.12 |
문자열.중복문자제거 (0) | 2023.01.12 |
문자열.대소문자 (0) | 2023.01.12 |
문자열.문자찾기 (0) | 2023.01.12 |
Comments