BOJ

[백준 10988번/JAVA] 팰린드롬인지 확인하기

syj0522 2024. 3. 11. 18:27

문제

백준 10988번
거꾸로 읽어도 원래 단어와 같은 것을 팰린드롬이라고 한다.
팰린드롬이면 1을, 아니면 0을 출력한다.

풀이 1) StringBuilder의 reverse()

StringBuilder의 reverse()를 사용하여 원래 문자열과 비교

코드

import java.util.*;
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 sb = new StringBuilder();

        //문자열 받아서 거꾸로 뒤집기
        //비교 후 같으면 1, 아니면 0 출력

        String str = br.readLine();
        String revStr = String.valueOf(sb.append(str).reverse());
        if(str.equals(revStr)) {
            bw.write(1+" ");
        }else bw.write(0+" ");
        bw.close();    
    }
}
//더 간결하게 만든 코드
import java.util.*;
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 sb = new StringBuilder(br.readLine());

        bw.write((sb.toString().equals(sb.reverse().toString())?1:0)+ "\n");
        bw.close();    
    }
}


간결한 코드(위)가 오히려 성능이 안 좋았다.

풀이 2) for문으로 문자 하나하나 비교

result를 1로 초기화
문자열의 i번째, str.length()-i-1번째 문자를 비교 -> str.length()/2번 반복
문자가 다르면 result에 0 대입

코드

import java.util.*;
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 str = br.readLine();
        int result = 1;
        for(int i=0; i<str.length()/2; i++) { 
            //문자열 길이/2만큼 반복하며 대칭에 있는 글자가 같은지 비교
            if(str.charAt(i) != str.charAt(str.length()-i-1)) {
                result = 0;
            }
        }
        bw.write(result+" ");
        bw.close();
    }
}

Note

바로 전 별찍기 문제도 그렇고 for문의 반복 횟수를 잘못 설정해서 자꾸 틀린다. 주의하자