본문 바로가기

코딩테스트/자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

섹션 1. 문자열 - 8. 유효한 팰린드롬

📌 문제 설명

앞에서 읽을 때나 뒤에서 읽을 때나 같은 문자열을 팰린드롬(Palindrome)이라고 합니다.

문자열이 입력되면 해당 문자열이 팰린드롬이면 "YES", 팰린드롬이 아니면 "NO"를 출력하는 프로그램을 작성하세요.

  • 팰린드롬 검사는 알파벳 문자만 고려하며, 대소문자를 구분하지 않습니다.
  • 알파벳 이외의 문자는 모두 제거해야 합니다.
  • 문자열 길이는 최대 100이며, 공백이 포함될 수 있습니다.

📝 입력 & 출력

🔹 입력

  • 첫 번째 줄: 공백 포함 문자열 (최대 길이 100)

🔹 출력

  • 첫 번째 줄: "YES" 또는 "NO" 출력

🔸 예제 입력 1

found7, time: study; Yduts; emit, 7Dnuof

🔸 예제 출력 1

YES

💡 해결 방법

  1. 문자열에서 알파벳 이외의 문자 제거 (replaceAll("[^A-Z]", "") 활용)
  2. 대소문자를 통일하여 비교 (toUpperCase() 사용)
  3. 팰린드롬 여부 확인
    • StringBuilder.reverse()를 사용하여 뒤집고 원본과 비교
    • 또는 투 포인터(Two-Pointer) 방식을 사용하여 앞뒤 문자 비교

💻 코드 구현 (Java)

package partString;

import java.util.*;

public class Problem8 {

    public String solution(String s) {
        s = s.toUpperCase().replaceAll("[^A-Z]", ""); // 알파벳만 남기기
        String tmp = new StringBuilder(s).reverse().toString();
        if (s.equals(tmp)) return "YES";
        else return "NO";
    }

    public static void main(String[] args) {
        Problem8 T = new Problem8();
        Scanner kb = new Scanner(System.in);
        String s = kb.nextLine(); // 한 줄 입력 받기
        System.out.println(T.solution(s));
        kb.close();
    }
}

📖 코드 설명

1️⃣ replaceAll("[^A-Z]", "")를 사용한 문자 정리

s = s.toUpperCase().replaceAll("[^A-Z]", "");
  • toUpperCase() → 대소문자 구분 없이 비교하기 위해 모두 대문자로 변환
  • replaceAll("[^A-Z]", "") → 알파벳이 아닌 문자를 제거
  • 알파벳만 남기므로 회문 검사가 가능해짐

2️⃣ StringBuilder.reverse()를 활용한 방법

String tmp = new StringBuilder(s).reverse().toString();
if (s.equals(tmp)) return "YES";
  • StringBuilder.reverse()를 사용하여 문자열을 뒤집음
  • 원본 문자열과 비교하여 팰린드롬 여부 판단

⏳ 시간 복잡도 분석

  • O(n) (n: 문자열 길이)
  • replaceAll()은 O(n), StringBuilder.reverse()도 O(n) → O(n) + O(n) = O(n)

출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

 

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런

김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급

www.inflearn.com