BOJ_S1_17609
๐ [S1_17609] ํ๋ฌธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N;
static String str;
static char[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// **** input start ****
N = Integer.parseInt(br.readLine());
// **** input end ****
for (int i = 0; i < N; i++) {
str = br.readLine();
arr = str.toCharArray();
int left = 0;
int right = str.length() - 1;
// ํ๋ฌธ์ธ ๊ฒฝ์ฐ
if (check(left, right)) {
sb.append("0").append("\n");
continue;
}
// ์ ์ฌํ๋ฌธ์ธ ๊ฒฝ์ฐ
if (check2(left, right))
sb.append("1").append("\n");
// ์๋ฌด๊ฒ๋ ์๋ ๊ฒฝ์ฐ
else {
sb.append("2").append("\n");
}
}
System.out.println(sb);
} // main end
// ํ๋ฌธ์ธ์ง ์ฒดํฌ
static boolean check(int left, int right) {
while (left <= right) {
// ๋ค๋ฅด๋ฉด
if (arr[left] != arr[right])
return false;
left++;
right--;
}
return true;
}
// ์ ์ฌ ํ๋ฌธ์ธ์ง ์ฒดํฌ
static boolean check2(int left, int right) {
while (left <= right) {
// ๋ค๋ฅด๋ฉด ์ผ์ชฝ ํ์นธ ์ค๋ฅธ์ชฝ ํ์นธ์ฉ ์ด๋์์ผ ๋น๊ตํด๋ณธ๋ค
if (str.charAt(left) != str.charAt(right)) {
boolean a = check(left + 1, right);
boolean b = check(left, right - 1);
if (!a && !b)
return false;
else
return true;
}
left++;
right--;
}
return true;
}
} // class end
๐ค ๋์ ์๊ฐ
๊ธฐ์กด ํธ๋จํ๋ฆฐ์์ ํ ์ธต ๋ ๋์๊ฐ ์ด์ ํ๋๋ฅผ ๋ฐ๊ฟ์ ํ๋ฌธ์ด ๋๋ ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋จผ์ String ์ ๋ ฅ์ ๋ฐ์ ํ๋ฌธ์ธ์ง ํ์ธํ๋ค. ํ๋ฌธ์ด๋ฉด โ0โ ์ถ๋ ฅ ( check )
- ํ๋ฌธ์ด ์๋๋ฉด ์ ์ฌํ๋ฌธ์ด ๋๋์ง ์ ์ฌํ๋ฌธ์ด ๋์ง ์๋์ง ์ฒดํฌํ๋ค. ( check2 )
- ๋ง์ฝ ๋ค๋ฅด๋ค๋ฉด ์ผ์ชฝ์์ +1 ํด์ ํ์ธ ํ๋ฒ
- ์ค๋ฅธ์ชฝ์์ -1 ํด์ ํ์ธ ํด์ ๋ ๋ค ๊ฐ์ง ์์ผ๋ฉด ์ ์ฌํ๋ฌธ์ด ์๋๋ค.
- ์ ์ฌํ๋ฌธ์ด๋ฉด โ1โ์ , ์ ์ฌํ๋ฌธ๋ ์๋๋ฉด โ2โ ๋ฅผ ์ถ๋ ฅํ๋ค.
for๋ฌธ์ ์ต์ํํ๊ณ ์ผ์ชฝ ํ์นธ ์ค๋ฅธ์ชฝ ํ์นธ์ฉ ์ด๋ํ๋ฉฐ ๋น๊ตํ๋ ๊ฒ์ด ํฌ์ธํธ ์๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฒด ๊ณผ์ ์ ํ์ธ ํ ๋๋ while(left<=right)
๋ฅผ ๊นจ๋ฌ์๋ค.