CODING TEST

백준 1254번 - 팰린드롬 만들기

우진하다 2023. 5. 29. 21:53

 

 

나의 풀이.

처음에 접근했을 때 단순하게 문자열 마지막 앞부터 역으로 추가하면서
리버스 한 값이 맞으면 응 팰린드롬이야 라고 생각해서 어찌어찌 코드짜서 예제 3번까지는 성공했으나
마지막 예제 4번에서 거의 두배보다 안되는 수가 계속 나오면서 아 틀린거구나 했다.

도저히 생각이 안나서 다른 분 풀이를 참고 했고 이해하니 충분히 풀 수 있었을텐데 하는 아쉬움은 사실 크게 안들었고
아직 멀었구나 하는 생각은 많이 들었다.

예제 2번을 예로 보면 입력된 문자열 "qwerty" 을 보면
qwerty, 0번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
werty, 1번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
erty, 2번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
끝까지 했는데도 팰린드롬이 아니기 때문에 결국 팰린드롬이 되는지는 마지막 문자열 하나만 남았을 경우다.
그래서 y 이전까지의 문자열을 그대로 이어 주면 qwertyqwert 로 되어 정답은 11이 된다.

그렇기 때문에 팰린드롬이 아니면 카운트를 하나씩 증가시켜주는데
이는 원래의 문자열 길이에 더해주면 최종 값이 된다
qwerty, 6 + qwert, 5 = result, 11;

아래 코드에는 팰린드롬일 경우인 문자열 출력과 최종 문자열도 확인할 수 있게 작성되어 있으니 참고 바란다.
아직 멀었다리 멀었다리 어렵다리 

package day027;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

public class Palindrome1254 {
    public static boolean checkPalindrome(String s) {
        Deque<String> deque = new ArrayDeque();
        boolean isPalindrome = true;

        for (String str : s.split("")) {
            deque.addFirst(str);
        }

        while (!deque.isEmpty()) {
            String s1 = deque.pollFirst();
            String s2 = deque.pollLast();

            if (s1 != null && s2 != null && !s1.equals(s2)) {
                isPalindrome = false;
                break;
            }
        }
        return isPalindrome;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        StringBuilder sb = new StringBuilder(input);
        int length = input.length();

        for (int i = 0; i < input.length(); i++) {
            if (checkPalindrome(input.substring(i))) {
                System.out.println(input.substring(i));
                break;
            }
            length++;
            sb.append(input.charAt(i));
        }
        System.out.println(length);
        System.out.println(sb.toString());
    }
}

 


문제 출처 : https://www.acmicpc.net/problem/1254

풀이 참고 : https://ilmiodiario.tistory.com/145