나의 풀이.
처음에 접근했을 때 단순하게 문자열 마지막 앞부터 역으로 추가하면서
리버스 한 값이 맞으면 응 팰린드롬이야 라고 생각해서 어찌어찌 코드짜서 예제 3번까지는 성공했으나
마지막 예제 4번에서 거의 두배보다 안되는 수가 계속 나오면서 아 틀린거구나 했다.
도저히 생각이 안나서 다른 분 풀이를 참고 했고 이해하니 충분히 풀 수 있었을텐데 하는 아쉬움은 사실 크게 안들었고
아직 멀었구나 하는 생각은 많이 들었다.
예제 2번을 예로 보면 입력된 문자열 "qwerty" 을 보면
qwerty, 0번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
werty, 1번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
erty, 2번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인
끝까지 했는데도 팰린드롬이 아니기 때문에 결국 팰린드롬이 되는지는 마지막 문자열 하나만 남았을 경우다.
그래서 y 이전까지의 문자열을 그대로 이어 주면 qwertyqwert 로 되어 정답은 11이 된다.
그렇기 때문에 팰린드롬이 아니면 카운트를 하나씩 증가시켜주는데
이는 원래의 문자열 길이에 더해주면 최종 값이 된다
qwerty, 6 + qwert, 5 = result, 11;
아래 코드에는 팰린드롬일 경우인 문자열 출력과 최종 문자열도 확인할 수 있게 작성되어 있으니 참고 바란다.
아직 멀었다리 멀었다리 어렵다리
package day027;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Palindrome1254 {
public static boolean checkPalindrome(String s) {
Deque<String> deque = new ArrayDeque();
boolean isPalindrome = true;
for (String str : s.split("")) {
deque.addFirst(str);
}
while (!deque.isEmpty()) {
String s1 = deque.pollFirst();
String s2 = deque.pollLast();
if (s1 != null && s2 != null && !s1.equals(s2)) {
isPalindrome = false;
break;
}
}
return isPalindrome;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
StringBuilder sb = new StringBuilder(input);
int length = input.length();
for (int i = 0; i < input.length(); i++) {
if (checkPalindrome(input.substring(i))) {
System.out.println(input.substring(i));
break;
}
length++;
sb.append(input.charAt(i));
}
System.out.println(length);
System.out.println(sb.toString());
}
}
문제 출처 : https://www.acmicpc.net/problem/1254
풀이 참고 : https://ilmiodiario.tistory.com/145
'CODING TEST' 카테고리의 다른 글
백준 1890번 - 동전 0 (0) | 2023.05.30 |
---|---|
백준 2167번 - 2차원 배열의 합 (0) | 2023.05.29 |
프로그래머스 - 덧칠하기 (0) | 2023.05.26 |
프로그래머스 - 전국 대회 선발 고사 (0) | 2023.05.26 |
프로그래머스 - 문자열 안에 문자열 (0) | 2023.05.22 |