728x90
https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
데칼코마니가 되는 문자를 만들기다.
문자열을 입력받은 후,
알파벳당 문자열에 쓰인 횟수를 기록한다.
팰린드롬이 되기 위해서는 모든 알파벳이 짝수개거나, 하나의 알파벳만 홀수개여야 한다.
(-하나의 알파벳만 홀수개인 경우, 해당 알파벳을 가장 중앙에 위치시켜야 함)
팰린드롬을 만들 수 있게 판별되었다면
StringBuffer의 insert메소드를 이용해여 문자열의 중앙에 알파벳을 차곡차곡 쌓도록 하고,
홀수개를 가진 알파벳의 문자 하나는 가장 중앙에 두게 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P1213 {
static int[] arr = new int[26];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer name = new StringBuffer();
name.append(br.readLine());
for (int i = 0; i < name.length(); i++) {
arr[name.charAt(i) - 'A']++;
}
int count = 0;
int single_alphabet = -1;
for (int i = 0; i < 26; i++) {
if (arr[i] % 2 != 0) {
count++;
single_alphabet = i;
if (count > 1) {
System.out.println("I'm Sorry Hansoo");
return;
}
}
}
StringBuffer sb = new StringBuffer();
int middle = 0;
for (int i = 0; i < 26; i++) {
if (i == single_alphabet) {
for (int j = 0; j < arr[i] - 1; j++) {
sb.insert(middle, (char) (i + 'A'));
}
} else {
for (int j = 0; j < arr[i]; j++) {
sb.insert(middle, (char) (i + 'A'));
}
}
middle = sb.length() / 2;
}
if (single_alphabet != -1) {
sb.insert(middle, (char) (single_alphabet + 'A'));
}
System.out.println(sb);
}
}
728x90
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 10819번: 차이를 최대로 (0) | 2023.01.12 |
---|---|
[자바] 백준 2309번: 일곱 난쟁이 (0) | 2023.01.11 |
[자바] 백준 7562번: 나이트의 이동 (0) | 2023.01.09 |
[자바] 8979번: 올림픽 (0) | 2023.01.09 |
[자바] 백준 1110번: 더하기 사이클 (0) | 2023.01.09 |
댓글