[Algorithm] 회문 문자열

2025. 2. 16. 11:45·Algorithm
설명

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

문자열이 입력되면 해당 문자열이 회문 문자열이면 "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
'Algorithm' 카테고리의 다른 글
  • [Algorithm] 보이는 학생 -> 입력 및 복잡도 생각하고 풀기
  • length vs length()
  • [Algorithm] 중복문자 제거하기
  • [Algorithm] 문자 찾기
xuv2
xuv2
집에 가고 싶다
  • xuv2
    xuvlog
    xuv2
  • 전체
    오늘
    어제
    • 전체 글 모아보기 (166) N
      • 잡담 (9)
      • 도전 , 자격증 (2)
      • Error (5) N
      • Java (23)
      • Spring (35) N
        • Core (10)
        • MVC (20)
        • Thymeleaf (5) N
      • DataBase (6)
        • Database Modeling (4)
        • SQL (2)
      • HTTP (11)
      • Network (17)
      • Software Engineering (3)
      • Operating System (3)
      • Algorithm (16)
      • Project (18)
        • Web (9)
        • iOS (8)
        • Python (1)
      • A.I (13)
      • Linux (5)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
xuv2
[Algorithm] 회문 문자열
상단으로

티스토리툴바