728x90
반응형
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);
}
}
728x90
반응형
'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 |