https://www.acmicpc.net/problem/20310
문제
어느 날, 타노스는 0과 1로 이루어진 문자열 를 보았다. 신기하게도, 가 포함하는 0의 개수와 가 포함하는 1의 개수는 모두 짝수라고 한다.
갑자기 심술이 난 타노스는 를 구성하는 문자 중 절반의 0과 절반의 1을 제거하여 새로운 문자열 를 만들고자 한다. 로 가능한 문자열 중 사전순으로 가장 빠른 것을 구하시오.
입력
문자열 가 주어진다.
출력
로 가능한 문자열 중 사전순으로 가장 빠른 것을 출력한다.
🔵풀이
사전에서 가장 빠른 것을 만들기 위해 1은 앞에서부터 절반을 제거하고 0은 뒤에서 부터 절반을 제거하였습니다. 연산을 편하게 하기 위해 StringBuffer를 사용하여 문자열을 다루었습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringBuffer stringBuffer = new StringBuffer(str);
int zeroCount = 0;
int oneCount = 0;
for (int i=0; i<stringBuffer.length(); i++){
if (stringBuffer.charAt(i)=='0'){
zeroCount++;
}
}
oneCount = (stringBuffer.length()-zeroCount)/2;
zeroCount/=2;
for (int i=0; i<oneCount; i++){
for (int j=0; j<stringBuffer.length(); j++){
if (stringBuffer.charAt(j)=='1'){
stringBuffer.deleteCharAt(j);
break;
}
}
}
for (int i=0; i<zeroCount; i++){
for (int j=stringBuffer.length()-1; j>-1; j--){
if (stringBuffer.charAt(j)=='0'){
stringBuffer.deleteCharAt(j);
break;
}
}
}
System.out.println(stringBuffer);
}
}