๐ ๋ฌธ์
https://www.acmicpc.net/problem/17609
๋ฌธ์
ํ๋ฌธ(ๅๆ) ๋๋ ํฐ๋ฆฐ๋๋กฌ(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๋ฅผ ์์๋๋ก ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
ํฐ๋ฆฐ๋๋กฌ(ํ๋ฌธ)์ด๋ผ๋ ๊ฐ๋ ์ ์ฒ์ ์ ํด๋ณธ ๋ฌธ์ ์๋ค.
โ๏ธ ๋ฌธ์์ด์ด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ๋จผ์ ํ์ธํ๋ค. ์ฒ์๊ณผ ๋๋ถํฐ ํ๋์ฉ ๋ฌธ์๊ฐ ์ผ์นํ๋์ง ์ฒดํฌํ๋ฉด ๋๋ค. ํ๋๋ผ๋ ๋ค๋ฅผ ๊ฒฝ์ฐ ํฐ๋ฆฐ๋๋กฌ์ด ์๋๋ค.
โ๏ธ ํฐ๋ฆฐ๋๋กฌ์ด ์๋ ๊ฒฝ์ฐ ์ ์ฌํ๋ฌธ์ธ์ง๋ฅผ ์ฒดํฌํ๋ค. ํ์ธ ์ค์ธ ๋ฌธ์์ด์ ๋งจ ์ผ์ชฝ์ด๋ ๋งจ ์ค๋ฅธ์ชฝ ๋ฌธ์๋ฅผ ํ๋์ฉ ์ง์์ ํ๋ฌธ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ณ , ๊ทธ๋ผ์๋ ์์ชฝ ์ด๋๋ ํ๋ฌธ์ด ์๋๋ผ๋ฉด ๊ทธ ๋ฌธ์์ด์ ์ ์ฌํ๋ฌธ์ด ์๋๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_17609_ํ๋ฌธ_์ค๋ฒI {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
String str = br.readLine();
if(palindrome(str)) System.out.println(0);
else if(pseudonym(str)) System.out.println(1);
else System.out.println(2);
}
}//end of main
private static boolean palindrome(String str) {//ํ๋ฌธ
int left = 0, right=str.length()-1;
while(left<=right) {
if(str.charAt(left++)!=str.charAt(right--)) return false;
}
return true;
}//end of palindrome
private static boolean pseudonym(String str) {//์ ์ฌํ๋ฌธ
int left=0, right=str.length()-1;
while(left<=right) {
if(str.charAt(left)!=str.charAt(right)) {
return palindrome(str.substring(left,right)) ||
palindrome(str.substring(left+1, right+1));
}
left++;
right--;
}
return true;
}//end of pseudonym
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ