Code.Dev_MH
DevMHK
Code.Dev_MH
전체 방문자
오늘
어제
  • 개발자의 일상 (40)
    • Language (5)
      • Java (4)
      • Kotlin (1)
      • Python (0)
    • Back-End (1)
      • Spring (1)
      • Django (0)
      • Error (0)
    • Infra (0)
      • Docker (0)
      • CI, CD (0)
      • AWS (0)
    • CS (12)
      • 컴퓨터 구조(Computer Architectur.. (12)
      • 운영 체제(OS) (0)
      • 시스템소프트웨어(SystemSoftware) (0)
      • 네트워크(Network) (0)
      • 소프트웨어공학(Software Engineerin.. (0)
      • 데이터베이스(DataBase) (0)
      • 자료구조(Data Structure) (0)
      • 알고리즘(Algorithm) (0)
    • Git (0)
    • Algorithm (21)
      • 프로그래머스 (5)
      • 백준 (16)
      • 코딩테스트 후기 (0)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Priority Queue
  • computer architecture
  • 너비우선탐색
  • dp
  • INT
  • 코틀린장점
  • java
  • 우선순위 큐
  • 제로베이스백엔드스쿨
  • Greedy
  • 프로그래머스
  • 컴퓨터구조
  • 자바와비교
  • 브루트포스
  • 코틀린사용이유
  • 그리디
  • BFS
  • 다이나믹프로그래밍
  • 백준
  • cs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Code.Dev_MH

DevMHK

[백준_1254] 팰린드롬 만들기
Algorithm/백준

[백준_1254] 팰린드롬 만들기

2023. 1. 3. 12:00

문제

백준 1254번
https://www.acmicpc.net/problem/1254

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

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

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

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.

첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.

  • 예시
    • 첫 번째 abab에서 뒤에 a만 추가해준다면 팰린드롬이 되어 기존 str의 길이에서 +1을 해주어 반환한다.
    • 두 번째 abacaba에서 보면 이미 팰린드롬이라 현재 str의 길이를 반환한다.
    • 세 번째 qwerty에서는 첫 문자와 마지막 문자 사이의 공통적인 문자이 없어 마지막 문자인 y을 기준으로 t, r, e, w, q를 추가해주어야 팰린드롬이 완성된다. 그래서 기존 str길이의 추가된 문자의 개수 5를 추가하여 반환한다.

Code

  • left = 0이고 right는 str.length - 1로 문자열의 인덱스이다.
  • isPalindrome메서드에 넣을 때 str을 문자로 바꿔 arr배열로 넣는다.
  • arr[left]와 arr[right]가 같지 않으면 멈춘다.
  • 그리고 main에 while문에서 left를 하나씩 늘려준다.
  • isPalindrome메서드에 while문에서 arr[left]와 arr[right]가 같다면 left는 하나 늘려주고 right는 하나 줄여준다.
  • 서로 같지 않을 때까지 반복하며 left가 right보다 같거나 커질 경우 true를 반환한다.
  • main에 while문에서 isPalindrome이 true이면 left에서 str.length(문자열의 길이)를 더해서 break 시켜준다.
    • 여기서 left는 isPalindrome메서드 안에서의 left가 아닌 메서드에 넣을 때 left이다.

Java

import java.util.*;
import java.io.*;


public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String str = st.nextToken(); // 문자열

        int cnt = 0; // 추가된 문자의 개수
        int left = 0;
        while (true) {
            // 팰린드롬 확인
            boolean flag = isPalindrome(left, str.length() - 1, str.toCharArray());
            if (flag) {
                cnt = left + str.length();
                break;
            }
            left++;
        }
        System.out.println(cnt);
    }

    public static boolean isPalindrome(int left, int right, char[] arr) {
        while (left < right) {
            // 같지 않을 경우
            if (arr[left] != arr[right]) {
                break;
            }
            left++;
            right--;
        }

        if (left >= right) {
            return true;
        }
        return false;
    }
}
반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준_15904] UCPC는 무엇의 약자일까?  (1) 2023.01.06
[백준_1260] DFS와 BFS  (0) 2023.01.05
[백준_2075] N번째 큰 수  (1) 2023.01.01
[백준_11657] 타임머신  (1) 2022.12.27
[백준_18352] 특정 거리의 도시 찾기  (1) 2022.12.26
    'Algorithm/백준' 카테고리의 다른 글
    • [백준_15904] UCPC는 무엇의 약자일까?
    • [백준_1260] DFS와 BFS
    • [백준_2075] N번째 큰 수
    • [백준_11657] 타임머신
    Code.Dev_MH
    Code.Dev_MH
    Back-End 개발자가 되기 위한 개발 노트(Java)

    티스토리툴바