문제] [유형3] 2번 - 회문 (100점)
모든 언어에 대해 시간 제한 2초, 메모리 제한 512MB입니다.
회문(回文) 또는 팰린드룸(palindrome)은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. 예를 들어 'abba', 'kayak', 'reviver', 'madam'은 모두 회문이다. 만일 그 자체는 회문이 아니지만 한 문자를 삭제하여 회문으로 만들 수 있는 문자열이라면 우리는 이런 문자열을 "유사회문"(pseudo palindrome)이라고 부른다. 예를 들어 'summuus'는 5번째나 혹은 6번째 문자'u'를 제거하여 'summus'인 회문이 되므로 유사회문이다.
여러분은 제시된 문자열을 분석하여 그것이 그 자체로 회문인지, 또는 한 문자를 삭제하면 회문이 되는 "유사회문"인지, 아니면 회문이나 유사회문도 아닌 일반 문자열인지를 판단해야 한다. 만일 문자열 그 자체로 회문이면 0, 유사회문이면 1, 그 외는 2를 출력해야 한다.
입력형식]
입력의 첫 줄에는 주어지는 문자열의 개수를 나타내는 정수 T(1 ≤ T ≤ 30)가 주어진다. 다음 줄부터 T개의 줄에 걸쳐 한 줄에 하나의 문자열이 입력으로 주어진다. 주어지는 문자열의 길이는 3이상 100,000이하이고, 영문 알파벳 소문자로만 이루어져 있다.
출력형식]
각 문자열이 회문인지, 유사회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
출처]
2019년 한국정보올림피아드 1차대회 2교시 초등부 pdf
참고풀이]
package e_Testing;
import java.util.*;
import java.lang.*;
public class e_2019_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int T=scan.nextInt();
//입력한 문자열의 개수가 1<=T<=30조건에 맞으면 작업을 진행한다.
if(T>=1 && T<=30)
{
//입력한 수만큼 문자열을 읽어온다.
String[] AStr=new String[T];
for(int i=1;i<=T;i++)
{
String Str=scan.next();
//읽어온 문자열의 길이가 3~100000 조건에 맞으면 체크할 문자열배열에 넣고
//맞지 않으면 작업을 끝낸다.
if(Str.length()>=3 && Str.length()<=100000)
AStr[i-1]=Str;
else
System.exit(0);
}
//읽어온 문자열들이 회문, 유사회문, 둘다 아닌지 체크한다.
for(int i=0;i<T;i++)
{
int N=AStr[i].length();
int chk=-1;
//회문여부를 체크한다.
for(int j=0;j<N;j++)
if(AStr[i].charAt(j) != AStr[i].charAt(N-1-j))
{
chk=j;
break;
}
//회문체크가 -1이면 회문을 출력하고 아니면 유사회문 또는 비회문인지 체크 계속한다.
if(chk==-1)
{
System.out.println("0");
continue;
}
//유사회문, 비회문인지를 문자별로 체크한다.
char[] A1=new char[N-1];
char[] A2=new char[N-1];
int chk1=0, chk2=0;
int A1chk=0, A2chk=0;
for(int j=0;j<N;j++)
{
if(j != chk) A1[chk1++]=AStr[i].charAt(j);
if(j != N-1-chk) A2[chk2++]=AStr[i].charAt(j);
}
for(int j=0;j<N-1;j++)
{
if(A1[j] != A1[N-2-j]) A1chk=1;
if(A2[j] != A2[N-2-j]) A2chk=1;
}
if(A1chk==1 && A2chk==1)
System.out.println("2");
else
System.out.println("1");
}
}
}
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 봄
'프로그램 > Java 1000제' 카테고리의 다른 글
Java 6제] 1~10까지 출력하기(private 객체변수 사용) (0) | 2022.11.07 |
---|---|
Java 5제] 1~10까지 출력하기(public 객체변수 사용) (0) | 2022.11.07 |
Java 4제] 1~10까지 출력하기(반복문 사용) (0) | 2022.11.07 |
Java 3제] 2021년 한국정보올림피아드 1차대회 초등부 1. 지우개 (0) | 2021.08.13 |
Java 1제] 2019년 한국정보올림피아드 1차대회 초등부 1번 - 막대기 (0) | 2021.07.09 |
댓글