๐ ๏ธ ๋ฌธ์ ๐ ๏ธ
๐๏ธ ์ค๋ช ๐๏ธ
์ด ๋ฌธ์ ๋ ํ๋ฌธ์ ์์๋ด๋ ๊ฒ์ด๋ค.
๋จ, 1๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ํ๋ฌธ์ด ๋๋ ๊ฒ๋ ์์๋ด์ผ ํ๋ค. ์ด ๋ถ๋ถ์์ ๋ฐ๋ก๋ฅผ ํ์ธํ๊ณ ๊ณ ์น๋ ๊ณผ์ ์ ์ ๋ฆฌํ๋ค.
ํ๋ฌธ์ ํน์ฑ์ผ๋ก ๊ฐ์ด๋ฐ๋ฅผ ๊ธฐ์ ์ผ๋ก ์์ชฝ์ด ๊ฐ์์ผ ํ๋ฏ๋ก start, end๋ฅผ ๋์ด ๋น๊ตํ๋ค.
์ฒ์์ ๋ด๊ฐ ํ๋ฌธ์ธ์ง ์์๋ด๋ ํจ์๋ฅผ ์์ฑํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
public static int isPalindrome(String s) {
int start = 0;
int end = s.length() - 1;
int count = 0;
while(start <= end) {
if(s.charAt(start) == s.charAt(end)) {
start++;
end--;
}
else {
count++;
if(s.charAt(start+1) == s.charAt(end)) {
start++;
}
else if(s.charAt(start) == s.charAt(end-1)) {
end--;
}
else {
count++;
}
}
if(count > 1) {
break;
}
}
if(count > 1) {
return 2;
}
return count;
}
๊ทธ๋ฅ ๋จ์ํ๊ฒ ์๊ฐํ์ฌ start์ end ์์น์ ์๋ ๋ฌธ์๊ฐ ๊ฐ์ง ์์ ๋ ๊ฐ๊ฐ ๋ค์ ๋ฌธ์๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฌ๋ ๋ฐ๋ก๊ฐ ์๋ค.
1
xyyyyxy
์์ ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ก์ ๊ฒฝ์ฐ ์ ๋ต์ 1์ด๋ค.
ํ์ง๋ง ๋ด ์ฝ๋๋ 2๊ฐ ๋์จ๋ค.
์๋ํ๋ฉด ๋ค์ y๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์๋๋ผ ์์ x๋ฅผ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
1
yxyyyyx
๋ฐ๋๋ก ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฌ๋ฐ๋ฅด๊ฒ 1์ด ์ถ๋ ฅ๋์๋ค.
์ฆ, ํ์ฌ ๊ตฌํ๋ ์ฝ๋๋ก๋ ์๋ถ๋ถ์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด์ผ์ง๋ง ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์ฐพ์ ์ ์๋ค.
๊ทธ๋์ ์๊ฐํ ๋ฐฉ์์ ๊ฐ๋จํ๋ค.
์ ์ฒด ๋ฌธ์์ด์์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฐพ๊ณ ๊ทธ ๋ค๋ฅธ ๋ถ๋ถ์์ ๋ฌธ์์ด์ด ํ๋ฌธ์ผ ๊ฒฝ์ฐ์๋ ์ ์ฌํ๋ฌธ์ด๋ค.
- start์ end ์ ๋ฌธ์๊ฐ ๋ค๋ฅผ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ๋ค๋ฅธ ๋ถ๋ถ ์ฐพ๊ธฐ
- ๋ง์ฝ ๋ค๋ฅด์ง ์๋ค๋ฉด ํ๋ฌธ์ด๋ค.
- ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ค๋ฉด
- ์ด๋ฏธ ํ๋ฒ ์ ๊ฑฐํ์ ๊ฒฝ์ฐ์ด๋ฉด ํ๋ฌธ์ด ์๋๋ค.
- ์์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด start + 1 ~ end ๊น์ง์ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง ํ์ธ
- ๋ค์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํด start ~ end - 1 ๊น์ง์ ๋ฌธ์์ด์ด ํ๋ฌธ์ธ์ง ํ์ธ
- ๋ ์ค ํ๋๋ผ๋ 0์ด ๋ฐํ๋๋ ํ๋ฌธ์ด๋ฉด ์ ์ฌํ๋ฌธ์ด๋ค.
- ์๋๋ฉด ํ๋ฌธ์ด ์๋๋ค.
๐ ํ์ด ๐
package Baekjoon;
import java.io.*;
public class String17609 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
for(int i = 0; i < t; i++) {
String s = br.readLine();
bw.write(isPalindrome(s, 0, s.length()-1, false) + "\n");
}
bw.flush();
bw.close();
}
/**
* ํฐ๋ฆฐ๋๋กฌ ๋ฌธ์์ด์ธ์ง ํ์ธํ๋ ํจ์
* @param s ๋ฌธ์์ด
* @param start ํ์ฌ ํ์ํ๊ณ ์๋ ์ ์ธ๋ฑ์ค
* @param end ํ์ฌ ํ์ํ๊ณ ์๋ ๋ค ์ธ๋ฑ์ค
* @param remove ์ ์ฌํ๋ฌธ์ธ์ง ๊ตฌ๋ถํ๋ ๋ณ์
* @return ํ๋ฌธ 0, ์ ์ฌํ๋ฌธ 1, ์๋ ๊ฒฝ์ฐ 2
*/
public static int isPalindrome(String s, int start, int end, boolean remove) {
boolean flag = false;
while(start <= end) {
if(s.charAt(start) == s.charAt(end)) {
start++;
end--;
}
else {
flag = true;
break;
}
}
if(flag) {
if (remove) {
return 2;
}
int front = isPalindrome(s, start+1, end, true);
int back = isPalindrome(s, start, end-1, true);
if(front == 0 || back == 0) {
return 1;
}
return 2;
}
return 0;
}
}
'ProgramSolve > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 12919๋ฒ - A์ B 2 (Java) (0) | 2023.12.24 |
---|---|
[BOJ] 10942๋ฒ - ํฐ๋ฆฐ๋๋กฌ? (Java) (0) | 2023.12.22 |
[BOJ] 1806๋ฒ - ๋ถ๋ถํฉ (Java) (1) | 2023.12.12 |
[BOJ] 11779๋ฒ - ์ต์๋น์ฉ ๊ตฌํ๊ธฐ2 (Java) (2) | 2023.12.08 |
[BOJ] 13270๋ฒ - ํผ๋ณด๋์น ์นํจ (Java) (2) | 2023.12.06 |