1. 문제
임한수와 임문빈은 서로 사랑하는 사이이다.
임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.
임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.
임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오.
첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다.
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
2. 풀이
1. 입력된 문자열을 char array로 만든다.
2. 26칸짜리 count배열을 만들어서 input문자-'A'한 값의 인덱스칸을 +1한다.
3. odd에는 count가 홀수인 문자를 저장한다. 초기값으로는 0을 설정했다.
4. 먼저 해당 카운트의 절반만큼만 StringBuilder sb에 붙인다.
5. 만약 카운트가 홀수라면 odd에 문자를 저장하는데, 이미 저장된 값이 있다면(odd!=0) 지정된 문장을 출력하고 끝낸다.
6. sb에 모두 저장됐다면 result라는 이름의 StringBuilder를 또 만들어서 기존 값을 모두 저장한다.
7. 홀수문자를 result에 더한다.
8. 마지막으로 sb를 뒤집어서 result에 더한다.
9. result를 출력한다.
import java.io.*;
public class BOJ_1213_팰린드롬만들기 {
public static void main(String[] args) throws Exception {
char[] input = new BufferedReader(new InputStreamReader(System.in)).readLine().toCharArray();
int[] count = new int[26];
for (char c : input) {
count[c - 'A']++;
}
char odd = 0;
StringBuilder sb = new StringBuilder();
for(int i=0;i<26;i++){
for(int j=0;j<count[i]/2;j++){
sb.append((char)(i+'A'));
}
if(count[i]%2==1) {
if(odd != 0){
System.out.println("I'm Sorry Hansoo");
return;
}
odd = (char) (i+'A');
}
}
StringBuilder result = new StringBuilder(sb);
if(odd != 0) result.append(odd);
result.append(sb.reverse());
System.out.println(result);
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 1198 삼각형으로 자르기 - JAVA (0) | 2022.06.15 |
---|---|
[BOJ] 1205 등수 구하기 - JAVA (0) | 2022.06.14 |
[BOJ] 1235 학생번호 - JAVA (0) | 2022.06.12 |
[BOJ] 1182 부분 수열의 합 - JAVA (0) | 2022.06.11 |
[BOJ] 1166 선물 - JAVA (2) | 2022.06.10 |
댓글