문제
문제 풀이
1. HashMap을 이용하여 각 알파벳이 나온 횟수 저장
2. 홀수개인 알파벳이 2개 이상될 경우 팰린드롬을 못 만드므로 바로 리턴
3. HashMap을 key값으로 정렬한 후 짝수개인 알파벳을 정답배열의 양쪽에 넣는다.
홀수개인 알파벳은 양쪽에 담은 후 따로 temp변수에 보관해 둔다.
4. 정답배열에 가운데에 홀수개인 알파벳을 넣는다.
소스 코드
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
char[] answer = new char[str.length()];
HashMap<Character, Integer> map = new HashMap<>();
for(int i = 0; i < str.length(); i++) {
if(map.containsKey(str.charAt(i)))
map.put(str.charAt(i), map.get(str.charAt(i)) + 1);
else
map.put(str.charAt(i), 1);
}
boolean check = false;
for(int a : map.values()) {
if(a % 2 != 0) {
if(check) {
System.out.println("I'm Sorry Hansoo");
return;
}
check = true;
}
}
char temp = 'a';
int sidx = 0, eidx = str.length()-1;
int idx = 0;
char[] arr = new char[map.size()];
for(char c: map.keySet()) {
arr[idx++] = c;
}
Arrays.sort(arr);
for(char c: arr) {
//짝수개이면
if(map.get(c) % 2 == 0) {
for(int i = 0; i < map.get(c); i+=2) {
answer[sidx++] = c;
answer[eidx--] = c;
}
}else {
for(int i = 0; i < map.get(c) - 1; i+=2) {
answer[sidx++] = c;
answer[eidx--] = c;
}
temp = c;
}
}
if(temp != 'a')
answer[sidx] = temp;
for(char c : answer)
System.out.print(c);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 15900번 나무 탈출 자바 (0) | 2022.05.19 |
---|---|
[백준] 2437번 저울 자바 (0) | 2022.05.06 |
[백준] 1292번 쉽게 푸는 문제 자바 (0) | 2022.04.25 |
[백준] 2461번 대표 선수 자바 (0) | 2022.04.25 |
[백준] 20365번 블로그2 자바 (0) | 2022.04.20 |