algorithm
유효한 팰린드롬
juuuuuuun
2024. 4. 28. 19:15
설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬이라고 합니다.
문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 알파벳만 가지고 회문을 검사하며, 대소문자를 구분하지 않습니다.
알파벳 이외의 문자들의 무시합니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 팰린드롬인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
found7, time: study; Yduts; emit, 7Dnuof
예시 출력 1
YES
소스코드 1
import java.util.Scanner;
public class Main{
public static String solution(String str) {
String answer = "YES";
//1. 단어별로 쪼개기
String[] words = str.split("\\s+");
String[] wordsArr = new String[words.length];
//2. 만약 단어의 개수가 6개라면 포문으로 1~3까지 돌려서 1-6 2-5 3-4 와 같은 식으로 비교하기
//2에서 비교할 때 알파벳 이외의 문자는 다 무시할 것 ex)숫자, 특수문자
for (int i = 0; i < words.length / 2; i++) {
//알파벳만 뽑아서 wordsArr에 단어별로 배열에 저장
for (int j = 0; j < words[i].length(); j++) { //words[i].length()는 단어 길이
if ('A' <= words[i].charAt(j) && words[i].charAt(j) <= 'z') {
wordsArr[i] += words[i].charAt(j);
}
}
for (int j = words[words.length - i - 1].length() - 1; j >= 0; j--) {
if ('A' <= words[words.length - i - 1].charAt(j) && words[words.length - i - 1].charAt(j) <= 'z') {
wordsArr[wordsArr.length - i - 1] += words[words.length - i - 1].charAt(j);
}
}
//대소문자 구분 없이 비교
if (!wordsArr[i].equalsIgnoreCase(wordsArr[words.length - i - 1])) {
answer = "NO";
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); //문자열 입력
System.out.println(solution(str));
}
}
소스코드 2
import java.util.Scanner;
public class Main {
public static String solution(String s) {
String answer = "YES";
s = s.toUpperCase().replaceAll("[^A-Z]",""); //대문자로 바꾸기, A-Z가 아니면 빈 문자로 출력하라
String str2 = new StringBuilder(s).reverse().toString();
for (int i = 0; i < s.length(); i++) {
if (str2.charAt(i) != s.charAt(i)) {
return "NO";
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(solution(str));
}
}
replaceAll()
- 문자열에서 특정 패턴을 찾아 다른 문자열로 대체한다.
- 첫 번째 매개변수는 반환하고자 하는 대상이 될 문자열 또는 정규 표현식
- 두 번째 매개변수는 변환할 문자 값
- 아래의 출력 결과는 "Hi World Hi Jun 이 된다.
String str = "Hello World Hello Jun";
String rep = str.replaceAll("Hello","Hi");
- 첫 번째 매개변수에 정규 표현식을 사용할 수도 있다.
- 아래의 출력 결과는 "H*ll* W*rld H*ll* J*n 이 된다.
String str = "Hello World Hello Jun";
String rep = str.replaceAll("[aeiou]","*");
- replace()와의 차이점으로는 replace는 정규표현식을 지원하지 않고 단순 문자열 치환에만 사용되며, replaceAll() 정규표현식을 사용하여 문자열을 치환하며, 더 다양한 패턴을 처리할 수 있다.