문제 출처 - Baekjoon Online Judge
문제는 여기
[문제]
동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.
동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.
동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.
[입력]
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.
[출력]
첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.
[풀이]
1. 문자가 팰린드롬인지 아닌지를 체크한다.
2. 팰린드롬이 아니라면 앞에서 한 문자씩 줄여가면서 팰린드롬인지 체크한다.
3. 팰린드롬이 맞게 되면 앞에서 자른 문자열의 수만큼을 추가한 길이가 정답이 된다.
[접근]
1. 팰린드롬을 만들기 위해서는 각 구간이 팰린드롬인지 체크를 할 필요가 있을 것 같았다.
2. 팰린드롬이 아니라면 앞에서부터 한 문자씩 줄여가면서 팰린드롬인지를 체크해야겠다고 생각했다.
[코드]
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main_S1_1254 {
static String s;
static int len;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
s = br.readLine();
len = s.length();
for (int i = 0; i < s.length(); i++) {
// 구간을 잘라서 펠린드롬인지 아닌지 확인
if (Palindrome(s.substring(i))) {
break; // 펠린드롬이면 탈출
}
len++;
}
System.out.println(len);
}
// 펠린드롬인지 확인
static boolean Palindrome(String s) {
int start = 0; // 시작
int end = s.length() - 1; // 끝
while (start <= end) {
// 다르면
if (s.charAt(start) != s.charAt(end))
return false; // 펠린드롬이 아님
start++;
end--;
}
return true; // 끝까지 탐색이 되면 펠린드롬
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S2 1535번 안녕 (JAVA) (0) | 2022.06.04 |
---|---|
[백준] S4 11656번 접미사 배열 (JAVA) (0) | 2022.02.27 |
[백준] B5 2338번 긴자리 계산 (JAVA) (0) | 2022.02.06 |
[백준] S5 15233번 Final Score (JAVA) (0) | 2022.02.05 |
[백준] S3 11478번 서로 다른 부분 문자열의 개수 (JAVA) (0) | 2022.02.04 |