팰린드롬이란 거꾸로 읽어도 제대로 읽는 것과 형태가 같은 문장을 이야기한다
(내이름은 이효리~ 거꾸로해도 이효리~)
진짜 작은 실수로 조금 오래걸렸다.
그리고 Collection을 많이 써서 시간 초과가 날까 걱정했지만 이정도는 괜찮은 것 같다.
검색해보니 반례에 대해서 예민한 문제인 것 같다.
홀수개인 문자가 포함되어 있어도 이를 가운데 배치시키면 팰린드롬이 가능하다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
String result = "";
HashMap<Character, Integer> hash = new HashMap<>();
ArrayList<Character> make = new ArrayList<>();
for(int i=0;i<name.length();i++){
hash.put(name.charAt(i),hash.getOrDefault(name.charAt(i),0)+1);
}//해당 글자가 몇개 나왔는지 세기 위함
int over=0;
String mid="";
for(Character key: hash.keySet()){
if(hash.get(key) %2 !=0){
over++;
if(over==2){
System.out.println("I'm Sorry Hansoo");
return;
}//만약 홀수개 문자가 하나 이상이면 실패 (하나면 중간에 배치할 수 있음)
mid+=key;//중간에 배치하기 위해 따로 뺴둠
if(hash.get(key)!=1) {
for (int i = 0; i < (hash.get(key)-1) / 2; i++) {
make.add(key);
}
}
/**만약 한 문자가 1개가 아닌 3개,5개.... 라면 가운데 올 문자 하나 빼고
나머지 문자들은 정렬을 해서 넣어야 사전 순으로 출력됨
*/
continue;
}
for(int i=0;i<hash.get(key)/2;i++) {
make.add(key);
}//글자가 짝수개라면 그냥 list에 넣어버리기
}
Collections.sort(make);
for(int i=0;i<make.size();i++){
result+=make.get(i);
}
result+=mid;
//홀수일 때 가운데 배치시키기
for(int i=make.size()-1;i>=0;i--){
result+=make.get(i);
}
System.out.println(result);
}
}
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
백준[2805] java -나무자르기 (0) | 2021.02.25 |
---|---|
백준[10773]- 제로 (java) (0) | 2021.02.25 |
백준[1244]- 스위치 켜고 끄기 (0) | 2021.02.25 |
백준[1764]-듣보잡 (0) | 2021.02.05 |
백준[1417]- 국회의원 선거 (0) | 2021.02.05 |