728x90
https://www.acmicpc.net/problem/15927
입력 받은 문자열중에서 가장 긴 부분문자열을 구하는 문제이다.
DP문제인줄 알았지만 도무지 점화식이 생각 안 나서 다르게 생각해본결과 규칙 찾기 문제였다.
답이 나오는 경우는 3가지 경우밖에 없다.
1) 전체가 Palindrome이 아닌경우
2) 전체가 Palindrome인 경우
3) 전체가 Palindrome이면서 모두 같은 문자일 경우
1)의 경우 당연히 가장 긴 팰린드롬은 "문자열 길이이다." ex) PALINDROME
2)의 경우 가장 긴 팰린드롬은 "문자열길이 -1" ex) ABCBA
3)의 경우 모두 같으므로 팰린드롬이 하나도 없다. 그러므로 "-1" ex) AAAAA
그러므로 모두 문자열이 모두 같은 문자인지 체크하고
그다음 전체 문자열이 팰린드롬인지만 체크해주면 된다.
package 백준;
import java.util.Arrays;
import java.util.Scanner;
public class 회문은회문이아니야 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
char [] s = sc.next().toCharArray();
//System.out.println(Arrays.toString(s));
int l = 0;
int r = s.length-1;
int k = 0;
//같은 문자 -1
//palindrom len -1
//not palndrom len
char c = s[0];
boolean flag = true;
for(int i =1 ;i <=r;i++) {
if(s[i]!=c) {
flag = false;
}
}
if(flag) {System.out.println("-1"); return;}
flag = true;
while(l<r) {
if(s[l]==s[r]) {
l++;
r--;
}
else {
flag = false;
break;
}
}
if(!flag) {
//System.out.println("팰린드롱 아님");
System.out.println(s.length);
}
else {
System.out.println(s.length-1);
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 1766 문제집 (0) | 2020.05.13 |
---|---|
백준 16228 GCC의 유산 (0) | 2020.05.09 |
백준 13907 세금 (0) | 2020.05.06 |
백준 문자열제곱 4354 (0) | 2020.05.02 |
백준 15824 너 봄 캡사이신이 맛있단다. (0) | 2020.04.29 |