본문 바로가기
알고리즘 문제풀이/백준

[알고리즘/백준] 1259 팰린드롬 수(자바)

by jeonghaemin 2021. 9. 21.
728x90

문제

https://www.acmicpc.net/problem/1259

풀이 코드

두가지 방법으로 풀이하였다.

풀이1 - StringBduiler사용

  • StringBuilder의 reverse() 메서드를 사용하여 문자열을 뒤집어 원래 문자열과 비교
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        while(true) {
            String s = br.readLine();

            if (s.equals("0")) {
                break;
            }

            String reverse = new StringBuilder(s).reverse().toString();

            if (s.equals(reverse)) {
                sb.append("yes").append("\n");
            } else {
                sb.append("no").append("\n");
            }
        }

        System.out.println(sb);
    }
}

풀이2 - 투포인터 알고리즘 사용

  • 투포인터 알고리즘을 사용하여 반대편에 있는 문자와 같은 문자인지 비교
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String s = "";

        while(true) {
            s = br.readLine();

            if (s.equals("0")) {
                break;
            }

            int left = 0;
            int right = s.length() - 1;
            boolean isPalindrome = true;

            while(left <= right) {
                if (s.charAt(left) != s.charAt(right)) {
                    isPalindrome = false;
                    break;
                }

                left++; right--;
            }

            if (isPalindrome) {
                sb.append("yes").append("\n");
            } else {
                sb.append("no").append("\n");
            }
        }

        System.out.println(sb);
    }
}

댓글