[1차시도]
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
Deque<String> deque = new ArrayDeque<String>();
int cnt = S.length();
for (String s : S.split("")) {
deque.addLast(s);
}
while (!deque.isEmpty()){
if (!deque.peekFirst().equals(deque.peekLast())){
deque.addLast(deque.peekFirst());
cnt++;
System.out.println(deque);
} else if (deque.peekFirst().equals(deque.peekLast())){
deque.pollFirst();
deque.pollLast();
System.out.println(deque);
}
}
System.out.println(cnt);
}
}
예제는 모두 맞았는데 오류가 나서 다른 반례를 찾아보니
'aabca' 실제 답은 'aabcacbaa'로 9가 나와야 하지만
코드 상 첫번째 a와 마지막 a가 소거되어 답이 7이 나왔다
열심히 만든 코드인데 다른 점을 잘 못찾겠어서 다른 분들의 해설을 좀 참고해 보니,
deque를 사용하지 않고 그냥 문자열 안에서 palindrome이 가능한 부분을 제외하고 아닌 부분을 더해주는 방법으로 푸셨길래 따라해 보았다!
[2차시도]
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
int cnt = S.length();
for (int i = 0; i < S.length(); i++) {
if (isPalindrome(S.substring(i))){
break;
}
cnt++;
}
System.out.println(cnt);
}
public static boolean isPalindrome (String S){
int start = 0 ;
int end = S.length()-1;
while (start <= end){
if (S.charAt(start) != S.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}
👍 내생각
구글링이 가능한 것에 감사하며,,
① isPalindrome이라는 함수를 만들어서 맨 뒤와 맨 앞의 글자가 같은지 체크해줌
② 주어진 글자수를 substring하면서 팰린드롬이 맞는 부분을 찾는다.
③ 팰린드롬이 아니면 정답으로 출력될 cnt에 1씩 더해준다.
(즉 팰린드롬이 되려면 뒤에 다른 글자가 하나 붙어야 된다는 의미)
④ 기존 cnt값은 주어진 문자열의 길이로 설정해준다.
🤔배운내용
팰린드롬이라는 단어를 보자마자 무슨 파블로프의 개처럼 deque를 떠올리지 말자..
문제를 보다 쉽게 풀 수 있는 방법이 있을지 많이 고민하자
(때로는 쉬운 방법으로 풀 수 있다)
사실 지금 푼 코드가 생각을 못해낼 정도는 아니였는데, 생각의 틀에 갇혀버린거 같다
아직은 시간에 촉박해 하지 말고, 문제를 열심히 푸는 걸로!