설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요.
단 회문을 검사할 때 대소문자를 구분하지 않습니다.
입력
첫 줄에 길이 100을 넘지 않는 공백이 없는 문자열이 주어집니다.
출력
첫 번째 줄에 회문 문자열인지의 결과를 YES 또는 NO로 출력합니다.
예시 입력 1
gooG
예시 출력 1
YES
Solution 1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class String7 {
public static String Solution(String str) {
String answer = "YES";
String upperCase = str.toUpperCase();
StringBuilder sb = new StringBuilder(upperCase).reverse();
if (!upperCase.equals(sb.toString())) {
answer = "NO";
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
br.close();
System.out.println(Solution(str));
}
}
1. 가장 직관적이고 이해하기 쉽도록 대문자 변환 -> StringBulider 패턴으로 비교
2. 읽고 이해하기 쉽지만 Builder 특성상 메모리 사용량이 높다. 그래서 직접 비교하는 방법으로 해결해도 됨 (대략 O(N) 정도)
Solution 2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Builder 패턴으로 풀어도 되지만 입력 글자를 2로 나눈 몫만큼만 반복문을 수행하는 방식을 택해도 된다 -> for(i < length / 2)
* 위 는 짝수 기준이지만, 홀수 스트링도 어차피 가운데 글자가 반환점이 되기떄문에 똑같이 풀어주면 된다
*/
public class String7_2 {
public static String Solution(String str) {
str = str.toUpperCase();
String answer = "YES";
int len = str.length();
for (int i = 0; i < len / 2; i++) {
if (str.charAt(i) != str.charAt(len - i - 1)) { // 인덱스 비교 공식 주의
return "NO";
}
}
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
br.close();
System.out.println(Solution(str));
}
}
1. 코드에 주석으로 적어 놨지만, 아래 내용을 유의하여 구현하면 된다
Builder 패턴으로 풀어도 되지만 입력 글자를 2로 나눈 몫만큼만 반복문을 수행하는 방식을 택해도 된다 -> for(i < length / 2)
위 내용은 짝수 기준이지만, 홀수 스트링도 어차피 가운데 글자가 반환점이 되기떄문에 똑같이 풀어주면 된다
2. 메모리 관련에서 효율적이지만, 인덱스를 잘못 지정해주면 오류 찾기 힘듦(대략 O(N/2) 정도)
'Algorithm' 카테고리의 다른 글
[Algorithm] 보이는 학생 -> 입력 및 복잡도 생각하고 풀기 (0) | 2025.05.08 |
---|---|
length vs length() (0) | 2025.05.08 |
[Algorithm] 중복문자 제거하기 (0) | 2025.02.15 |
[Algorithm] 문자 찾기 (0) | 2025.02.15 |
[Algorithm] 배열 입력이 [1,2,3](대괄호)와 같을 때 (0) | 2024.12.28 |