📌 문제 설명
앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 회문 문자열(Palindrome)이라고 합니다.
문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 "NO"를 출력하는 프로그램을 작성하세요.
- 회문 검사는 대소문자를 구분하지 않습니다.
- 문자열 길이는 최대 100입니다.
- 공백이 없는 문자열이 주어집니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 공백 없는 문자열 (최대 길이 100)
🔹 출력
- 첫 번째 줄: "YES" 또는 "NO" 출력
🔸 예제 입력 1
gooG
🔸 예제 출력 1
YES
💡 해결 방법
- 문자열을 대소문자 구분 없이 변환 (toUpperCase() 또는 equalsIgnoreCase())
- 두 가지 방법으로 회문 검사
- StringBuilder.reverse() 사용 → 문자열을 뒤집어서 원본과 비교
- 투 포인터(Two-Pointer) 사용 → 앞뒤 문자를 비교하면서 확인
💻 코드 구현 (Java)
package partString;
import java.util.*;
// 회문 문자열
public class Problem7 {
public String solution(String str) {
// 방법 1: StringBuilder.reverse() 활용
String tmp = new StringBuilder(str).reverse().toString();
if (str.equalsIgnoreCase(tmp)) return "YES";
else return "NO";
}
public static void main(String[] args) {
Problem7 T = new Problem7();
Scanner kb = new Scanner(System.in);
String s = kb.next();
System.out.println(T.solution(s));
kb.close();
}
}
📖 코드 설명
1️⃣ StringBuilder.reverse()를 활용한 방법
String tmp = new StringBuilder(str).reverse().toString();
if (str.equalsIgnoreCase(tmp)) return "YES";
- StringBuilder.reverse()를 사용하여 문자열을 뒤집음
- equalsIgnoreCase()를 사용하여 대소문자 구분 없이 문자열 비교
2️⃣ 투 포인터(Two-Pointer) 활용한 방법
public String solution(String str) {
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 "NO";
}
return "YES";
}
- 앞에서부터 비교하는 i와 뒤에서부터 비교하는 len - i - 1을 활용
- ✅ 추가적인 문자열 생성 없이 O(n)으로 해결 가능
⏳ 시간 복잡도 분석
- O(n) (n: 문자열 길이)
- StringBuilder.reverse()는 O(n), equalsIgnoreCase()도 O(n) → O(n) + O(n) = O(n)
- 투 포인터 방법: O(n)
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 1. 문자열 - 9. 숫자만 추출 (0) | 2025.03.18 |
|---|---|
| 섹션 1. 문자열 - 8. 유효한 팰린드롬 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 6. 중복 문자 제거 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 5. 특정 문자 뒤집기 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 4. 단어 뒤집기 (0) | 2025.03.18 |