[백준] 20310번 타노스 JAVA (자바) 풀이
문제 20310
- 0과 1로 이루어진 문자열 S
- S가 포함하는 0의 개수와 1의 개수는 모두 짝수
- 갑자기 타노스는 구성하는 문자 중 절반의 0과 절반의 1을 제거하여 새로운 문자열 S'를 만들고자 한다
- S'로 가능한 문자열 중 사전순으로 가장 빠른 것을 구해라
[입력]
: 문자열 S
[출력]
: 문자열 중 사전순으로 가장 빠른 것을 출력
[코드]
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s = in.readLine();
int num0 = 0;
int num1 = 0;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
sb.append(c);
if(c == '0') num0++;
else num1++;
}
num0 /= 2;
num1 /= 2;
for(int i = 0; i < sb.length(); i++){
if(sb.charAt(i) == '1') {
sb.setCharAt(i, '2');
num1--;
}
if(num1 == 0) break;
}
for(int i = sb.length() - 1; i > -1; i--){
if(sb.charAt(i) == '0') {
sb.setCharAt(i, '2');
num0--;
}
if(num0 == 0) break;
}
for(int i = 0; i < sb.length(); i++){
if(sb.charAt(i) == '1' || sb.charAt(i) == '0') System.out.print(sb.charAt(i));
}
}
}
[해설]
: String s = in.readLine(); 첫째줄 입력 (문자열)
int num0 = 0; 0개수
int num1 = 0; 1개수
: StringBuilder sb = new StringBuilder();
: for(int i = 0; i < s.length(); i++){
char c = s.charAt(i); 문자 하나씩 보기
sb.append(c); 각 문자를 sb에 추가하고 각 문자 객체 카운트
if(c == '0') num0++; 각 문자 카운트
else num1++;
}
: num0 /= 2; 값 절반으로 나누기
num1 /= 2;
: for(int i = 0; i < sb.length(); i++){
if(sb.charAt(i) == '1') { 1을 만나면
sb.setCharAt(i, '2'); 문자를 2로 바꾸고
num1--; num1 감소
}
if(num1 == 0) break; 절반 모두 제거하면 종료
}
: for(int i = sb.length() - 1; i > -1; i--){
if(sb.charAt(i) == '0') { 0을 만나면
sb.setCharAt(i, '2'); 문자를 2로 바꾸고
num0--; num0 감소
}
if(num0 == 0) break; 절반 모두 제거하면 종료
}
: for(int i = 0; i < sb.length(); i++){ 문자가 1이나 0인 경우만 출력
if(sb.charAt(i) == '1' || sb.charAt(i) == '0') Systehttp://m.out.print(sb.charAt(i));
}
이제 풀어보러 갈께요 :)
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *
20310번: 타노스
어느 날, 타노스는 0과 1로 이루어진 문자열 $S$를 보았다. 신기하게도, $S$가 포함하는 0의 개수와 $S$가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 $S$를 구성하는 문자
www.acmicpc.net