[java] SWEA - 19003 팰린드롬 문제

동훈·2024년 5월 9일


문제해석을 해보자면
입력받은 문자열이 반대로봐도 똑같은 문자열이라면 팰린드롬이다.
문자열 N 개를 입력받고 문자열 끼리 붙혔을 때도 팰린드롬이 된다면 그 최대길이를 구하는 문제
예를 들어서 #1 예시를 보면 racecar 는 앞으로 보나 뒤로보나 racecar 가되니까 팰린드롬이다.
#2 예시를 보면 abb , bba 자체는 팰린드롬이 아니지만 두문자열을 붙혔을때
abbbba 는 팰린드롬이 되는것을 볼 수 있다.
즉, 들어와있던 문자열을 뒤집어서 다음 문자열과 비교하는 방식으로 코드를 구현해보았다.

일단 팰린드롬 인지 아닌지의 여부를 알아야하고, 팰린드롬일때 최대 길이가 몇인지를 알아야한다.

package SWEA_24_05_09;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;

public class D3_19003 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int test_case = 1; test_case <= T; test_case++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());
            int result = 0;
            boolean check = false;
            Set <String> set = new HashSet<>();
            for (int i = 0; i < N; i++) {
                String str = br.readLine();
                if (set.contains(str)){ 
                    result += M * 2;
                }else {
                    if (!check && pal(str)){
                        check = true;
                        result += M;
                    }else {
                        StringBuilder sb = new StringBuilder(str);
                        set.add(sb.reverse().toString());
                    }
                }
            }
            System.out.println("#" + test_case + " " + result);
        }
    }
    static boolean pal(String str){
        for (int i = 0; i < str.length()/2; i++) {
            if (str.charAt(i) != str.charAt(str.length()-1 -i)){
                return false;
            }
        }
        return true;
    }

}

check = 팰린드롬인지 여부를 확인하는 용도
문자열을 입력받고 , 이미 set에 있는 문자열이라면 그냥 result 값에 문자열길이를 2배해서 넣고,
pal 함수를 통해 그 자체가 팰린드롬인게 확인이 되었다면, 문자열길이만큼만 더해준다.
만약 그게 아니라면 StringBuilder 의 reverse 함수를 통해 뒤집은 문자열을 set 에 넣어준다
그래야 다음 문자열과 비교했을때 같다면 이라는 조건으로 넘어가기 때문

profile
성실함 한스쿱

0개의 댓글