본문 바로가기

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

섹션 1. 문자열 - 7. 회문 문자열

📌 문제 설명

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

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

  • 회문 검사는 대소문자를 구분하지 않습니다.
  • 문자열 길이는 최대 100입니다.
  • 공백이 없는 문자열이 주어집니다.

📝 입력 & 출력

🔹 입력

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

🔹 출력

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

🔸 예제 입력 1

gooG

🔸 예제 출력 1

YES

💡 해결 방법

  1. 문자열을 대소문자 구분 없이 변환 (toUpperCase() 또는 equalsIgnoreCase())
  2. 두 가지 방법으로 회문 검사
    • 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