23-07-31 TIL

more·2023년 7월 31일
0
  • 백준 20310 (타노스) - Java
    • 아주 간단하게 0과 1의 count를 세고, 그 숫자를 반씩 해서 앞에는 0, 뒤에는 1이 오도록 하면 된다고 생각한 문제이다.
    • 예를 들어, 01010101이면 0이 4개고, 1이 4개니까 그거를 2개씩으로 줄이고, 0011로 만들면 된다... 라고 생각하고 구현하였다.
    • 그런데 막상 제출하니 25점으로 나왔다...
    • 문제를 잘 못 읽었나해서 다시 읽어보았는데도 고작 2줄짜리 문제라서 다른 문제나 조건이 있지는 않았다.
    • 계속 고민을 하다가 어느새 1시간이 지나서... 결국은 검색을 하게 되었는데
    • 해당 count를 세서 절반하는 것은 맞지만 처음 주어진 문자열에서 앞에서 1들을 제거하고 뒤에서 0들을 제거하는 방식으로 해서 제출하라고 한다.
    • 해보니 100점이 나오기는 하는데... 왜 인지는 아직도 잘 모르겠음.
  • 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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 S = br.readLine();
        // 처음 문자 만큼의 길이를 가진 문자열 생성
        char[] arr = new char[S.length()];
		// 처음 문자의 0과 1의 갯수 변수
        int count0 = 0;
        int count1 = 0;
		
        for (int i = 0; i < S.length(); i++) {
        	// 해당 문자를 문자열에 할당
            arr[i] = S.charAt(i);
            // 0이 나오면 count0 + 1, 1이 나오면 count1 + 1
            if (S.charAt(i) == '0') count0++;
            else count1++;
        }
		// 0과 1을 센 각각을 절반으로 나눔
        // 문제에서 0과 1은 항상 짝수만큼 있다고 지정
        count0 = count0 / 2;
        count1 = count1 / 2;
		// 앞에서부터 1이 나오면 제거 (없는 거로)
        for (int i = 0; i < S.length() && count1 != 0; i++) {
            if (arr[i] == '1') {
                count1--;
                arr[i] = 0;
            }
        }
		// 뒤에서부터 0이 나오면 제거 (없는 거로)
        for (int i = S.length() - 1; i >= 0 && count0 != 0; i--) {
            if (arr[i] == '0') {
                count0--;
                arr[i] = 0;
            }
        }
		// 새로 할당할 StringBuilder 생성
        StringBuilder res = new StringBuilder();
        // 0이 아니면 StringBuilder에 할당
        for (int i = 0; i < S.length(); i++) {
            if (arr[i] != 0)
                res.append(arr[i]);
        }
		// 출력
        bw.write(String.valueOf(res));

        bw.flush();
        bw.close();
        br.close();
    }
}
profile
조금 더

0개의 댓글