문제: https://www.acmicpc.net/problem/10988

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

level -> 팰린드롬

backjoon -> no 팰린드롬

이효리 -> 팰린드롬 (거꾸로 해도 이효리)

다양한 방법으로 풀 수 있다. character 배열에 넣고 (첫번째 원소 == 마지막 원소) 를 비교해 가면서 인덱스를 증감 시켜도 되고, Deque 자료구조를 사용해 배열과 같은 원리로 풀 수도 있고, 입력 문자열을 reverse 하여 비교하여도 된다.

아래는 Deque을 사용한 기본적인 풀이. Deque을 사용하면 인덱스를 증감 시키는 것에 신경을 안 써도 되어서 좋다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Deque<String> deque = new LinkedList<>(Arrays.asList(br.readLine().split("")));

        boolean isPalindrome = true;
        while (deque.size()>1) {
            if (!deque.removeFirst().equals(deque.removeLast())) {
                isPalindrome = false;
                break;
            }
        }

        System.out.println(isPalindrome?"1":"0");
    }
}

아래는 문자열 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));

        String input = br.readLine();
        String reverse = new StringBuilder(input).reverse().toString();

        System.out.println(input.equals(reverse)?"1":"0");
    }
}

아래는 Deque과 Stream API를 사용한 풀이. Stream을 쓰는게 적절한 문제는 아니지만 한창 배우는 중이라 연습 겸 써 보았다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Deque<String> deque = new LinkedList<>(Arrays.asList(br.readLine().split("")));

        boolean isNotPalindrome = IntStream.range(0, deque.size() / 2)
                .anyMatch(x -> !deque.removeFirst().equals(deque.removeLast()));

        System.out.println(isNotPalindrome?"0":"1");
    }
}

 

No image

Java 좋아 👍