[백준] 타노스 20310 java

오늘내일·2024년 6월 11일
0

이 문제는 문제가 명확하지 못 한 것인지, 내가 제대로 문제를 해석하지 못 한 것인지 모르겠다. 사실 문제를 제대로 해석했어도 구현하는 방법이 잘 떠오르지 않았을 것 같긴 하다. 이 문제도 아래 블로그를 참고하여 풀었다.
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);
  }
}
profile
다시 시작합니다.

0개의 댓글