20310 타노스 문제 링크
문제

#1
import java.awt.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String a = br.readLine();
int countZ = 0;
int countO = 0;
for(int i=0; i<a.length(); i++) {
if(a.charAt(i) == '0') countZ++;
if(a.charAt(i) == '1') countO++;
}
String num = "";
for(int i=0; i<countZ/2; i++) {
num+="0";
}
for(int i=0; i<countO/2; i++) {
num+="1";
}
bw.write(num);
bw.flush();
bw.close();
}
}

- 틀렸습니다 or 맞았습니다가 아니라 25점..?

- 서브 태스크라는 게 있는데 부분 정답 처리인 것 같다
- 추가 조건이 없는데 태스크2를 어떻게 맞추지..
- 문제를 잘못 이해함
- 무조건 사전순으로 재배열 하는 게 아니라
- 위치를 고정한 상태에서 수를 하나씩 지우는데 사전순으로 앞서도록 지우는 것이 문제 해설임..
#2
- 위치 고정 후 지우는데 사전순..
- 말이 어려워 보이는데 결국 문자가 "0", "1"로만 이루어져 있어서
- "0", "1" 개수의 1/2만큼으로 각각 for문을 돌려서
- "0"은 뒤부터 제거, "1"은 앞부터 제거 해주면 된다
- 근데 문자열에서 index로 문자를 삭제하는 방법이 생각보다 까다로웠음
a.substring()를 통해서 문자열을 잘라주려고 했는데
- index 0부터 0까지 자르기, 즉 무의미한 식을 작성하는 것이 불가능함
- 그래서 StringBuilder를 사용함
- deleteCharAt를 통해서 index로 해당 문자열을 삭제할 수 있음
- 여기서 주의할 점을 문자가 아닌 문자열 이라는 것
import java.awt.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder a = new StringBuilder(br.readLine());
int countZ = 0;
int countO = 0;
for(int i=0; i<a.length(); i++) {
if(a.charAt(i) == '0') countZ++;
if(a.charAt(i) == '1') countO++;
}
for(int i=0; i<countZ/2; i++) {
int indexZ = a.lastIndexOf("0");
a = a.deleteCharAt(indexZ);
}
for(int i=0; i<countO/2; i++) {
int indexO = a.indexOf("1");
a = a.deleteCharAt(indexO);
}
bw.write(a.toString());
bw.flush();
bw.close();
}
}

- 결론적으로, 성공!
- stringBuilder 자료형을 알게됨
- stringBuilder에 대해서 따로 정리해보고 싶음