-
[백준 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()); } } }
'Algorithm > Greedy Algorithm' 카테고리의 다른 글
[백준 1783번] 병든 나이트 (Java 풀이) (0) 2022.03.11 [백준 2812번] 크게 만들기 (Java 풀이) (0) 2022.03.10 [백준 2847번] 게임을 만든 동준이(Java 풀이) (0) 2022.03.01 [백준 1202번] 보석 도둑(Java 풀이) (0) 2022.02.28 [백준 1543번] 문서 검색(Java 풀이) (0) 2022.02.23