개발 공부~
[문자열] 유효한 팰린드롬 .java 본문
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
found7, time: study; Yduts; emit, 7Dnuof
예시 출력 1
YES
내 풀이
알파벳만 따로 저장한 문자열을 만들고 이를 회문 검사하는 방식으로 구현하였다.
1. 알파벳만 검사 -> Character.isAlphabetic() 으로 검사
2. 대소문자를 구분하지 않기 때문에 다 소문자로 바꿔 tmp 문자열에 하나씩 저장
3. tmp문자열을 lt, rt로 돌면서 회문 검사
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String tmp = "";
for(int i = 0; i < str.length(); i++){
if(Character.isAlphabetic(str.charAt(i))){
tmp += Character.toLowerCase(str.charAt(i));
}
}
char[] chars = tmp.toCharArray();
int lt = 0;
int rt = chars.length - 1;
boolean isPalindrome = true;
while (lt < rt) {
if (chars[lt] != chars[rt]) {
isPalindrome = false;
break;
}
lt++;
rt--;
}
if (isPalindrome) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
다른 풀이
replaceAll("[^A-Z]", "")
[]: 대괄호 안의 문자들의 범위에 속하는 것을 의미
^: 대괄호 안의 ^는 부정을 의미
=> 대문자 A-Z까지가 아니면 빈문자로 대체하라
정규식 참고 글
https://better21.tistory.com/126
[자바] replaceAll("정규식","대체문자")
replaceAll("정규식","대체문자") 문자열 내에서 특정 패턴을 찾아 다른 문자열로 대체하는 데 사용첫 번째 인수는 정규식(Regular Expression), 두 번째 인수는 대체할 문자열 1. . (dot)-> 모든 문자-> 예:
better21.tistory.com
import java.util.Scanner;
public class Main {
public String solution(String s){
String answer = "NO";
//알파벳만 있도록 정규식으로
s = s.toUpperCase().replaceAll("[^A-Z]", "");
//문자열 s를 거꾸로 뒤집은 문자열 tmp
String tmp = new StringBuilder(s).reverse().toString();
//두 문자열이 같으면 회문
if(s.equals(tmp)) answer = "YES";
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(T.solution(str));
}
}
💡
회문은 투포인터로 검사하는 것이 익숙해서 다른 방법을 생각안했는데 스트링빌더의 리벌스를 이용하는 게 더 간편한 문제였다.
또한 하나하나 검사할 필요없이 알파벳이 아닌 문자를 빈문자로 바꾸는 것을 생각하지 못해 신기했다
정규식이 익숙해지면 for문보다 훨씬 편할 것 같다
아직 부족하니 다른 문제도 for문보다 정규식으로 대체할 수 있는 문제인지 먼저 고려해야겠다
'코딩테스트 > 기타' 카테고리의 다른 글
[문자열] 가장 짧은 문자 거리 .java (0) | 2024.09.24 |
---|---|
[문자열] 숫자만 추출 .java (0) | 2024.09.23 |
[문자열] 중복문자제거 .java (0) | 2024.09.08 |
[문자열] 특정 문자 뒤집기 .java (4) | 2024.09.07 |
[문자열] 단어 뒤집기 .java (0) | 2024.09.07 |