https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
해석 및 팁
먼저 배열에 입력받은 문자열의 알파벳의 개수를 저장해 줍니다. 길이가 홀수인데 1개뿐인 숫자가 여러 개 거나 글자의 길이가 짝수인데 1개뿐인 숫자가 있거나 개수가 홀수인 알파벳이 2개 이상 있으면 팰린드롬수를 만들 수 없으므로 I'm Sorry Hansoo를 출력해주면됩니다. 만들 수 있는 경우에는 먼저 문자열의 절반을 list에 저장합니다. 그다음 홀수 있으면 절반의 문자열중 앞부분에 더합니다. 그다음 반대쪽을 만들기 위해 뒤집어서 합치면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
StringBuilder list = new StringBuilder();
int[] alpha = new int[26];
String str = sc.next();
for(int i = 0; i < str.length(); i++) alpha[str.charAt(i) - 'A']++;
int odd = 0;
int index = 0;
for(int i = 0; i < 26; i++) {
if(alpha[i] % 2 == 1) {
odd++;
index = i;
}
}
if((str.length() % 2 == 1 && odd > 1) || (str.length() % 2 == 0 && odd > 0) || odd >= 2) sb.append("I'm Sorry Hansoo");
else {
for(int i = 0; i < 26; i++) {
for(int j = 0; j < alpha[i] / 2; j++) list.append((char)(i + 'A'));
}
String ori = list.toString();
String rev = list.reverse().toString();
if(odd == 1) ori += (char)(index +'A');
sb.append(ori + rev);
}
System.out.println(sb);
}
}
'백준' 카테고리의 다른 글
백준 1783 병든 나이트(Java) (0) | 2023.02.04 |
---|---|
백준 1431 시리얼 번호(Java) (0) | 2023.02.04 |
백준 1072 게임(Java) (0) | 2023.02.03 |
백준 10973 이전 순열(Java) (0) | 2023.02.03 |
백준 17626 Four Squares(Java) (0) | 2023.02.03 |