ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 1213번] 팰린드룸 만들기(Java 풀이)
    Algorithm/Greedy Algorithm 2022. 3. 4. 14:27

    백준알고리즘 1213번 : 팰린드룸 만들기

     

     

     

    팰린드롬이란 회문, 즉 거꾸로 읽어도 같은 말이 되는 단어 혹은 문장을 말한다.

    단어가 주어졌을 때 사전순으로 앞서는 팰린드롬을 만들고,

    만들 수 없다고 판단되면 오류 메시지를 출력하는 문제이다.

    단어가 홀수인 경우와 짝수인 경우로 나누어 풀었다.

     

    풀이 과정


    1. 사전순으로 출력되게 해야하므로, 배열을 받아 정렬한다.
    2. 짝수인 경우에는 for문을 돌며 i번째와 i+1번째를 비교하여 StringBuilder로 append함과
      동시에 Stack에 push를 하고 두 문자가 다른 경우에는 즉시 오류 처리하며 종료하도록 했다.
       오류 처리가 되지 않은 경우에는 append한 String 값에 stack을 pop하여 단어를 추가 append하여
       출력하도록하였다.
    3. 홀수인 경우가 조금더 복잡했는데, for문을 돌며 i번째와 i+1번째를 비교하되 달라도 한번은 
        ok한다.
        (대신 해당 값이 유일한 가운데 문자라는 전제하에 해당 단어를 별개의 String 변수로 담아둔다.)
        skip한 i번째 대신, 나머지 문자들끼리 비교할 수 있도록 i를 -1처리해준다.
       또 다른 경우가 발생한다면 즉시 오류 처리하며 종료하도록 한다.
       오류 처리가 되지 않은 경우에는 append한 String 값에 가운데 문제를 append하고, 최종적으로        stack을 pop하여 단어를 추가 append하여 출력하도록한다.

     

     

    소스 ▽

    더보기
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Stack;
    
    public class Main {// No1213 팰린드롬 만들기
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringBuilder sb = new StringBuilder();
    		String[] text = br.readLine().split("");
    		Stack<String> stack = new Stack<>();
    
    		Arrays.sort(text);
    
    		a: if (text.length % 2 == 0) {
    			for (int i = 0; i < text.length; i += 2) {
    				if (text[i].equals(text[i + 1])) {
    					sb.append(text[i]);
    					stack.push(text[i]);
    				} else {
    					System.out.println("I'm Sorry Hansoo");
    					break a;
    				}
    			}
    			while (!stack.isEmpty()) {
    				sb.append(stack.pop());
    			}
    			System.out.println(sb.toString());
    		} else {
    			String temp = "TMP";
    			for (int i = 0; i < text.length - 1; i += 2) {
    				if (text[i].equals(text[i + 1])) {
    					sb.append(text[i]);
    					stack.push(text[i]);
    				} else if (temp.equals("TMP")) {
    					temp = text[i];
    					i--;
    				} else {
    					System.out.println("I'm Sorry Hansoo");
    					break a;
    				}
    			}
    			if (temp.equals("TMP")) {
    				temp = text[text.length - 1];
    			}
    			sb.append(temp);
    			while (!stack.isEmpty()) {
    				sb.append(stack.pop());
    			}
    			System.out.println(sb.toString());
    		}
    	}
    }

     

     

    댓글

Designed by Tistory.