코딩테스트 연습 기록

이종길·2022년 3월 3일
0

코딩테스트 연습

목록 보기
92/128

2022.03.03 68일차

백준 1254번 (팰린드롬 만들기)

문제

동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.

동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.

동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.

나의 풀이

  1. subString을 활용해서 팰린드롬 파악 가능, 기본적으로 count는 S의 길이
  2. 절반을 나누어서 경우의 수 계산(전체 길이가 홀수면 가운데 수는 제외)
  3. 나눈 두가지를 비교했을 때 같지 않으면 count 증가
  4. 같았을 때 count 출력
import java.io.*;
import java.util.*;

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

        String S = br.readLine();
        boolean cond1 = true;
        int count = S.length();

        while (cond1) {
            int calLength = S.length() / 2;
            boolean cond2 = true;

            String a = S.substring(0, calLength);
            String b;
            if (S.length() % 2 == 1) {
                b = S.substring(calLength + 1);

            } else {
                b = S.substring(calLength);
            }

            for (int i = 0; i < calLength; i++) {
                if (a.charAt(i) != b.charAt(calLength - i - 1)) {
                    count++;
                    S = S.substring(1);
                    cond2 = false;
                    break;
                }
            }

            if (cond2) cond1 = false;
        }

        System.out.println(count);
    }
}

생각하기

  • StringBuffer의 reverse를 활용하면 더 쉽게 풀이 가능
String temp1 = S.subString(i);
String temp2 = new StringBuffer(temp1).reverse().toString();
  • cond2를 생각하는 것보다 boolean을 결과로 한 함수를 하나 만들기
profile
Go High

0개의 댓글

관련 채용 정보