ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Baekjoon] 1254번 - 팰린드롬 만들기(JAVA)
    Baekjoon/Silver 2024. 7. 5. 08:25

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

    조건 체크

    "문자열 S로 만들 수 있는 가장 짧은 문자열" 을 만들어야 하고, 앞에서 읽으나 뒤에서부터 읽으나 같은 문자열이어야 한다.

    예를들면 토마토 같은...

    예제에서 주어진 간단한 식에는 abab => ababa 등의 형태로 가운데 문자 a를 기준으로 ab, ba가 있는 형태도 있지만, abba도 팰린드롬이다.

    풀이

    입력으로 주어진 S가 팰린드롬인지부터 확인하고, 팰린드롬으로 만들 수 있는지 체크하도록 한다.

    예를들어 abcdefghi라는 입력이 왔을때, 문자열 길이는 9이므로, (팰린드롬의 최대길이는 입력 문자열 S*2 이다.)

    for문을 9/2 q부터 9까지 반복문을 통해 찾으면 된다.

    S = abcdefghi 일때, S에서 9/2(4.5인데 int이므로 4가 출력) substring을 추출해 'abcd' 형태로 만들고 StringBuffer를 통해 reverse 한 후 연결한다.

    그럼 첫번째 팰린드롬을 체크할 문자열은 'abcddcba'이고 S가 포함되는지 체크,

    같은방법으로 두번째는 abcdedcba, abcdeedcba, abcdefedcba, abcdeffedcba, ... 순으로 abcdefghiihgfedcba 까지 체크하면 끝이다.

    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String N = br.readLine();
            String a = N.substring(0, N.length()/2), b = N.substring(N.length()/2, N.length()), c, d;
            for(int i = 0; i < b.length(); i++) {
                String t = new StringBuffer(a).reverse().toString();
                c = a + t;
                d = a + b.charAt(i) + t;
                if(c.contains(N)) {
                    System.out.println(c.length());
                    break;
                }
                if(d.contains(N)) {
                    System.out.println(d.length());
                    break;
                }
                a+=b.charAt(i);
            }
        }
    }

    'Baekjoon > Silver' 카테고리의 다른 글

    [Baekjoon] 1912번 - 연속합(JAVA)  (0) 2024.07.22
    [Baekjoon] 3019번 - 테트리스(java)  (0) 2024.06.20
    [Baekjoon] 1074번 - Z (java)  (0) 2024.05.22

    댓글

Designed by Tistory.