알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
level
1
전체 길이의 1/2만큼을 앞과 뒤에서 가져온다. (뒤에서 가져올 땐 역순으로 가져온다.)
앞과 뒤에서 가져온 문자열이 일치할 경우 팰린드롬으로 판단.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int length = input.length();
String Front;
String Back;
if(length%2==0) {
Front = input.substring(0, (length/2));
Back = input.substring((length/2), length);
} else {
Front = input.substring(0, (length/2));
Back = input.substring((length/2)+1, length);
}
StringBuffer str = new StringBuffer(Back);
Back = str.reverse().toString();
if(Front.equals(Back)) {
System.out.print(1);
} else {
System.out.print(0);
}
}
}
방법은 쉽게 생각했는데 reverse 함수가 String이 아닌 StringBuffer 메소드라는 걸 까먹어서 구글링의 도움을 받았던 코드... 그래서 String과 StringBuffer의 차이를 아주 간단하게 정리하고 마무리 하겠다.
String은 불변(immutable)한 문자열을 처리하기 위한 클래스.
즉, String 객체가 생성되면 그 값은 변경되지 않음. “새로운 객체”로 추가 및 변경.
다음과 같이 선언하여 사용할 수 있음.
String str = "Hello";
아래와 같이 문자열을 변경할 수 있어보이나, 새로운 객체로 재생성되는 것.
str += " World";
StringBuffer는 가변(mutable)한 문자열을 처리하기 위한 클래스.
즉, 새로운 문자열을 추가하거나 변경하게 되면 “기존의 객체”로 추가 및 변경.
String보다 속도적인 측면에서도 유리.
다음과 같이 선언하여 사용할 수 있음.
StringBuffer sb = new StringBuffer("Hello");
아래와 같이 문자열을 변경할 수 있다. 기존 객체에 추가되는 것.
sb.append(" World");
String에서 StringBuffer로 변환
String str = "Hello";
StringBuffer strToSb = new StringBuffer(str);
StringBuffer에서 String으로 변환
StringBuffer sb = new StringBuffer("Hello");
String str = String.valueOf(sb);
또는
StringBuffer sb = new StringBuffer("Hello");
String str = sb.toString();