본문 바로가기
알고리즘/백준

[백준 / 팰린드롬 만들기 / JAVA]

by KDW999 2023. 3. 31.

https://www.acmicpc.net/problem/1254

 

1254번: 팰린드롬 만들기

동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다. 동호는

www.acmicpc.net

 

문제 접근

머릿 속에서 떠올리는 거랑 직접 코드로 짜는 거랑은 다르다고 느꼈다.

문제를 풀 수 있는 규칙을 떠올리는 과정이 쉽지 않았다.

 

그래서 다른 사람의 도움을 받았음

 

 1. 앞에 문자부터 하나씩 잘라가면서 만든 문자열로 앞, 끝 문자를 한 칸씩 땡기면서 비교 (전체 틀)
 2. 비교하면서 문자가 다르면 다시 돌아와서 기존 문자열 크기에 +1 → 잘라버린 앞 문자를 문자열 맨 뒤에 붙여서 팰린드롬을 만든다는 개념
 3. 맨 앞 문자 자르고 다시 앞, 끝 문자 한 칸씩 땡기면서 비교
 4. 계속 비교하면서 두 문자가 같다면 앞 문자 인덱스와 뒷 문자 인덱스가 교차하는 지점이 생김
     그럼 연산 종료되고 이건 팰린드롬 문자란 뜻

 

간단하게 첫 문자와 끝 문자를 하나씩 비교해가면서 팰린드롬이 완성되는지 확인하는데 팰린드롬이 완성안되면 앞에 있던 문자들을 문자열 뒤에 붙여서 팰린드롬으로 만들어준다.

 

https://ilmiodiario.tistory.com/145 ← 이 분 그림보면 이해하기 더 수월하다

public class Main {
   public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
   
    	String str = sc.nextLine();
    	int num = str.length();
    	
    	for(int i=0; i<str.length(); i++) {
    		if(count(str.substring(i))) break;
    		num++;
    	}
    	System.out.println(num);
   }
    
    private static boolean count(String s) {
    	int start = 0;
    	int last = s.length()-1;
    	
    	while(start <= last ) {
    		if(s.charAt(start) != s.charAt(last)) return false;
    		
    		start++;
    		last--;
    	}
    	return true;
    }
}

 

댓글