728x90
https://www.acmicpc.net/problem/1213
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().strip();
char[] arr = str.toCharArray();
boolean isEven = (arr.length % 2 == 0)?true:false;
Arrays.sort(arr);
char mid = ' ';
String result = "";
String reverseResult = "";
for (int i=0; i<arr.length; i++) {
if (i < arr.length -1 && arr[i] == arr[i+1]) {
result += arr[i];
reverseResult = "" + arr[i] + reverseResult;
i++;
continue;
}
if (!isEven && mid == ' ') {
mid = arr[i];
} else {
System.out.println("I'm Sorry Hansoo");
return;
}
}
if (!isEven)
result = result + mid + reverseResult;
else
result = result + reverseResult;
System.out.println(result);
}
}
- string값을 받아 char 배열로 만든다
- 홀수일 경우 중간 값을 저장할 수 있다 -> isEven이라는 변수에 홀수인지 짝수인지 여부를 저장한다
- 캐릭터 배열을 정렬한다(ABC순으로 정렬될 것이다)
- 캐릭터 배열을 돌면서 2개씩 뺀다. 만약 한 개만 있을 경우 (1) char배열 size가 홀수이고 (2) mid값이 비어있을 경우 mid에 값을 하나 저장한다
- 중간에 있는 값은 하나여야하기 때문에 2개이상 혼자있는 값이 나오면 I'm Sorry Hansso를 출력
- result에 붙일 때 reverseResult도 같이 붙여서 바로 프린트해준다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().strip();
String result = "";
String reverseResult = "";
Map<Character, Integer> map = new TreeMap<>();
for (int i =0; i<str.length(); i++) {
map.put(str.charAt(i), map.getOrDefault(str.charAt(i), 0) + 1);
}
String mid = "";
for (char ch : map.keySet()) {
int value = map.get(ch);
if (value % 2 != 0) {
if (str.length() % 2 != 0 && mid == "") { //홀수이고 mid == " "
mid = String.valueOf(ch);
map.put(ch, map.get(ch) - 1);
} else {
System.out.println("I'm Sorry Hansoo");
return;
}
}
}
for (char ch : map.keySet()) {
String tmp = "" + String.valueOf(ch).repeat(map.get(ch) / 2);
result = result + tmp;
reverseResult = tmp + reverseResult;
}
System.out.println(result + mid + reverseResult);
}
}
- HashMap을 사용한 풀이
- HashMap의 keySet을 받으면 정렬되지 않아 52%에서 틀렸다고 나왔다.
- TreeMap을 사용하면 KeySet을 받을 때 정렬된 상태로 받을 수 있다고 한다
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 16953 A -> B - 실버2 (그리디, bfs) (0) | 2023.07.12 |
---|---|
[Java] 백준 13305 주유소 - 실버4 (0) | 2023.07.12 |
[Java] 백준 2217 로프 - 실버4 (0) | 2023.07.12 |
[Java] 백준 2839 설탕 배달 - 실버4 (0) | 2023.07.12 |
[Java] 백준 25496 장신구 명장 임스 - 실버5 (0) | 2023.07.11 |