๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/17609)
< ํ๋ฌธ >
๋ฌธ์ ํ์ด
๋ฌธ์์ด์ ๋งจ ์ฒ์๊ณผ ๋์ ์์์ผ๋ก ์ค๊ฐ๊น์ง ๋ณด๋ฉด์ ํ๋ฌธ์ธ์ง ํ์ธํ๋ค.
* ์ผ์ชฝ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ ๋, ์ค๋ฅธ์ชฝ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ ๋ ๋ ๋ค ํ๋ฌธ์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ๋ ๊ฐ์ง ๊ฒฝ์ฐ ๋ค ํ์ธํด์ผ ํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class _17609_ { // ํ๋ฌธ
static String str;
static boolean remove, check, result;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(bf.readLine());
for (int i = 0; i < t; i++) {
str = bf.readLine();
int start = 0, end = str.length() - 1;
remove = false;
check = false;
result = false;
check(start, end);
if (check) {
bw.write("2\n");
} else if (remove) {
bw.write("1\n");
} else if (result) {
bw.write("0\n");
}
}
bw.flush();
}
private static void check(int start, int end) {
while (start != end) {
if (result) {
break;
}
if (str.charAt(start) == str.charAt(end)) {
if (start + 1 > end - 1 || start + 1 == end - 1) {
result = true;
break;
}
start++;
end--;
} else if (!remove) {
if (str.charAt(start + 1) == str.charAt(end) && str.charAt(start) == str.charAt(end - 1)) {
remove = true;
if (start + 1 == end) {
break;
}
check(start + 1, end);
if (check) {
check = false;
}
check(start, end - 1);
}
if (str.charAt(start) == str.charAt(end - 1)) {
remove = true;
start++;
end -= 2;
} else if (str.charAt(start + 1) == str.charAt(end)) {
remove = true;
start += 2;
end--;
} else {
check = true;
break;
}
} else {
check = true;
}
if (result) {
break;
}
if (check) {
break;
}
}
}
}
๋ณ์)
t : ๋ฌธ์์ด์ ๊ฐ์
str : ๋ฌธ์์ด
start, end : ์ธ๋ฑ์ค
remove : ํ ๋ฌธ์ ์ญ์ ์ฌ๋ถ
check : ํ๋ฌธ, ์ ์ฌํ๋ฌธ ์๋ ์ฌ๋ถ
result : ํ๋ฌธ ์ฌ๋ถ
๋ฌธ์์ด์ ๊ฐ์๋งํผ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ์ ํ๋ฌธ์ธ์ง ํ๋จํ๊ธฐ ์ํด check ํจ์๋ฅผ ํธ์ถํ๋ค.
๋ง์ฝ ๋ฌธ์์ด์ start ์ธ๋ฑ์ค ์์น์ ๋ฌธ์์ end ์ธ๋ฑ์ค ์์น์ ๋ฌธ์๊ฐ ๊ฐ๋ค๋ฉด ๋ค์ ๋ฌธ์๋ฅผ ํ์ธํ๊ธฐ ์ํด start+1, end-1์ ํ๋ค. ๋ง์ฝ stat ์ธ๋ฑ์ค ์์น์ ๋ฌธ์์ end ์ธ๋ฑ์ค ์์น์ ๋ฌธ์๊ฐ ๊ฐ์ง ์๋ค๋ฉด ํ ๋ฌธ์๋ฅผ ์ญ์ ํด์ ํ๋ฌธ์ ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ค. ์์ง ํ ๋ฌธ์๋ฅผ ์ญ์ ํ์ง ์์๋ค๋ฉด ์ผ์ชฝ ๋ฌธ์๋ฅผ ์ญ์ ํ์ ๋์ ์ค๋ฅธ์ชฝ ๋ฌธ์๋ฅผ ์ญ์ ํ์ ๋ ์ด๋ ์ชฝ์ด ํ๋ฌธ์ผ์ง๋ฅผ ํ๋จํด์ผ ํ๋ค. ๋ง์ฝ ์ผ์ชฝ ๋ฌธ์๋ฅผ ์ง์๋ ์ค๋ฅธ์ชฝ ๋ฌธ์์ ๊ฐ๊ณ , ์ค๋ฅธ์ชฝ ๋ฌธ์๋ฅผ ์ง์๋ ์ผ์ชฝ ๋ฌธ์์ ๊ฐ๋ค๋ฉด ์ผ์ชฝ์ ์ง์ ์ ๋, ์ค๋ฅธ์ชฝ์ ์ง์ ์ ๋ ๋ ๋ค ํ์ธํด์ผ ํ๋ฏ๋ก check ํจ์๋ฅผ ๊ฐ๊ฐ ํธ์ถํ๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ํ์ชฝ๋ง ์ง์ด๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ํด๋นํ์ง ์๋๋ค๋ฉด ํ๋ฌธ๊ณผ ์ ์ฌ ํ๋ฌธ์ด ์๋๋ฏ๋ก check๋ฅผ true๋ก ๋ฐ๊พธ๊ณ ์ข ๋ฃํ๋ค. ์ค๊ฐ๊น์ง ํ์ธํด์ ํ๋ฌธ์ด ๋ง๋ค๋ฉด result๋ฅผ true๋ก ๋ฐ๊พธ๊ณ ์ข ๋ฃํ๋ค.
check๊ฐ true๋ผ๋ฉด ํ๋ฌธ๊ณผ ์ ์ฌํ๋ฌธ์ด ์๋๋ฏ๋ก 2๋ฅผ ์ถ๋ ฅํ๊ณ remove๊ฐ true๋ผ๋ฉด ์ ์ฌํ๋ฌธ์ด๋ฏ๋ก 1์ ์ถ๋ ฅ, result๊ฐ true๋ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2660_ํ์ฅ๋ฝ๊ธฐ (0) | 2023.12.20 |
---|---|
[Baekjoon] 1092_๋ฐฐ (0) | 2023.12.19 |
[Baekjoon] 13398_์ฐ์ํฉ 2 (1) | 2023.12.15 |
[Baekjoon] 5582_๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด (0) | 2023.12.14 |
[Baekjoon] 20529_๊ฐ์ฅ ๊ฐ๊น์ด ์ธ ์ฌ๋์ ์ฌ๋ฆฌ์ ๊ฑฐ๋ฆฌ (0) | 2023.12.13 |