이 문제는 문제가 명확하지 못 한 것인지, 내가 제대로 문제를 해석하지 못 한 것인지 모르겠다. 사실 문제를 제대로 해석했어도 구현하는 방법이 잘 떠오르지 않았을 것 같긴 하다. 이 문제도 아래 블로그를 참고하여 풀었다.
https://yuejeong.tistory.com/45
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
// 0과 1로 이루어진 문자열 S
// S가 포함하는 0의 개수와 1의 개수는 모두 짝수
// 절반의 0과 절반의 1을 제거하여 새로운 문자열을 만듬, 사전순으로 가장 빠른 것
// 문제 포인트는 기존 문자열에서 0과 1을 제거해 나가는 것
// 사전순으로 가장 빠른 것을 찾으려면 왼쪽에 0이 많아야 하기 때문에 왼쪽에서부터 1을 지워나가고, 오른쪽에서부터 0을 지워나간다.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] str = br.readLine().toCharArray();
int oneCount = 0;
int zeroCount = 0;
// 0과 1의 개수를 센다.
for (int i = 0; i < str.length; i++) {
if (str[i] == '1') {
oneCount++;
} else {
zeroCount++;
}
}
// 왼쪽에서부터 1을 1의 총 개수 반까지 제거해나간다.
// 오른쪽에서부터 0을 0의 총 개수 반까지 제거해나간다.
int oneHalf = oneCount / 2;
int zeroHalf = zeroCount / 2;
for (int i = 0; i < str.length; i++) {
if (str[i] == '1' && oneHalf > 0) {
str[i] = '-';
oneHalf--;
}
if (str[str.length - 1 - i] == '0' && zeroHalf > 0) {
str[str.length - 1 - i] = '-';
zeroHalf--;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length; i++) {
if (str[i] != '-') {
sb.append(str[i]);
}
}
System.out.println(sb);
}
}