와드의 블로그

10988번: 팰린드롬인지 확인하기 본문

PS/B.O.J

10988번: 팰린드롬인지 확인하기

Ward 2026. 3. 19. 15:24

문제

주어진 단어가 팰린드롬인지 확인하는 문제입니다. 팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말합니다. (예: "level", "noon"은 팰린드롬이고, "baekjoon", "online"은 팰린드롬이 아닙니다.)

  • 입력: 첫째 줄에 알파벳 소문자로만 이루어진 단어가 주어집니다. (단어의 길이는 1 이상 100 이하)
  • 출력: 첫째 줄에 팰린드롬이면 1, 아니면 0을 출력합니다.

풀이 1: StringBuilder의 reverse() 활용

문자열을 다루는 데 특화된 자바의 StringBuilder 클래스를 활용하면 코드를 매우 직관적이고 간결하게 작성할 수 있습니다.

  1. 문자열 뒤집기: StringBuilder에서 제공하는 reverse() 메서드를 사용하여 원본 문자열을 역순으로 뒤집은 문자열을 만듭니다.
  2. 문자열 비교: String 클래스의 equals() 메서드를 사용하여 원본 문자열과 뒤집힌 문자열이 일치하는지 확인합니다. 일치하면 "1", 다르면 "0"을 삼항 연산자를 통해 출력합니다.

코드 1

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

       // 입력을 받아 StringBuilder 객체 생성
       StringBuilder sb = new StringBuilder(br.readLine());

       // 원본 문자열과 뒤집은 문자열 저장
       String s = sb.toString();
       String t = sb.reverse().toString();

       // 두 문자열이 같으면 1, 다르면 0을 삼항 연산자로 출력
       bw.write(s.equals(t) ? "1" : "0");

       bw.flush();
    }
}

풀이 2: 인덱스 활용

문자열 객체를 새로 생성하지 않고, 문자열의 양 끝 인덱스에서 시작하여 중심부로 이동하며 문자를 하나씩 비교하는 정석적인 방법입니다.

  1. 탐색 범위 최적화: 문자열의 양 끝에서 동시에 비교해 들어오므로, 문자열 길이의 절반(len / 2)까지만 반복문을 수행하면 됩니다.
  2. 인덱스 비교: i번째 문자와 대칭되는 위치인 len - 1 - i번째 문자를 비교합니다.
  3. 불일치 판별: 비교 도중 단 하나라도 문자가 다르다면 팰린드롬이 아니므로 플래그 변수를 false로 바꾸고 반복문을 즉시 종료(break)합니다.

코드 2

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

       String s = br.readLine();
       int len = s.length();
       boolean isPalindrome = true;

       // 문자열의 양 끝에서부터 중심을 향해 비교
       // 전체 길이의 절반만 탐색하면 됨
       for (int i = 0; i < len / 2; i++) {
          // 앞쪽 문자(i)와 대칭되는 뒤쪽 문자(len - 1 - i)가 다르면
          if (s.charAt(i) != s.charAt(len - 1 - i)) {
             isPalindrome = false;
             break; // 더 이상 비교할 필요가 없으므로 종료
          }
       }

       // 플래그 변수 상태에 따라 결과 출력
       bw.write(isPalindrome ? "1" : "0");

       bw.flush();
    }
}

알고리즘 분류

문자열 처리 (String), 구현 (Implementation)

'PS > B.O.J' 카테고리의 다른 글

11655번: ROT13  (0) 2026.03.19
1159번: 농구 경기  (0) 2026.03.19
2979번: 트럭 주차  (0) 2026.03.19
10808번: 알파벳 개수  (0) 2026.03.19
2309번: 일곱 난쟁이  (0) 2023.03.04