[Java] 백준 20310 타노스

Lee GaEun·2024년 12월 30일

[Java] 알고리즘

목록 보기
40/93

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));

        //N = Integer.parseInt(br.readLine());
        //StringTokenizer st = new StringTokenizer(br.readLine());;
        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에 대해서 따로 정리해보고 싶음
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글