[ 백준 ] 1213 - 팰린드롬 만들기(with.Java)

2 min read

💡문제 분석 요약
-- 문제 --
입력 :영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다.
출력 : 첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
💡알고리즘 설계
BufferedReader사용
SpringBuilder사용
팰린드롬 = ABAB → ABBA 처럼 대칭 제작
문자가 홀수인 경우 1번까지 허용 , 짝수일 경우 앞부분 먼저 넣고 뒷부분 나중에 넣기. 홀수가 존재한다면 가운데에 넣기.
💡코드
package backjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BackJoon1213 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int[] arr = new int[26];
String input = br.readLine();
for (int i = 0; i < input.length(); i++) {
int index = input.charAt(i) - 'A';
arr[index]++;
}
int odd=0;
int num=0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 != 0) {
odd++;
num=i;
}
if (odd >= 2) {
System.out.println("I'm Sorry Hansoo");
return;
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i] / 2; j++) {
sb.append((char) (i + 'A'));
}
}
String result = sb.toString();
if (odd == 1) {
result += (char) (num + 'A');
}
result += sb.reverse().toString();
System.out.println(result);
}
}
💡시간복잡도
O(N*N)
💡틀린 이유
reverse처리
홀수 글자 있을 때 경우 처리
💡틀린 부분 수정 or 다른 풀이
💡느낀점 or 기억 할 정보
팰린드롬 알고리즘 = 문자 대칭 만들기 ! 홀수 개 문자 1번 허용
A~Z까지 26개 → 문자.charAt()- ‘A’로 문자를 숫자로 바꾼 후 인덱스에 번호로 저장 가능
0
Subscribe to my newsletter
Read articles from Soyulia directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Soyulia
Soyulia
Nice to meet u :) Im Backend Developer