반응형
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);
}
}
반응형
'Java > Java 알고리즘 인프런' 카테고리의 다른 글
[Ch.01 - String] 09. 숫자만 추출 (+ replaceAll) (0) | 2022.05.15 |
---|---|
[Ch.01 - String] 08. 유효한 팰린드롬 (+ replaceAll ) (0) | 2022.05.15 |
[Ch.01 - String] 06. 중복문자제거 (+ charAt, indexOf) # (0) | 2022.05.15 |
[Ch.01 - String] 05. 특정 문자 뒤집기 (+ isAlphabetic) (0) | 2022.05.12 |
[Ch.01 - String] 04. 단어 뒤집기 # (+StringBuilder) (0) | 2022.05.12 |