문자열을 입력으로 받은 뒤 연결되어 있는 0과 1을 뒤집어서 최소값을 구해줘야 하는데, 연결된 0과 1만 한번에 뒤집을 수 있으므로, 해당 방법으로 최소값을 찾아줘야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringTokenizer st0 = new StringTokenizer(s, "0");
StringTokenizer st1 = new StringTokenizer(s, "1");
System.out.println(Math.min(st0.countTokens(), st1.countTokens()));
}
}
문제의 핵심은 연결된 0, 1만 뒤집을 수 있지만 엄청난 경우의 수를 계산하는 것이 아니라, 나열된 0과 1을 쪼개본 뒤 0과 1중에 더 적은 숫자를 뒤집어주면 끝나게 되므로
StringTokenizer st0 = new StringTokenizer(s, “0”);
StringTokenizer st1 = new StringTokenizer(s, “1”);
이렇게 0과 1로 쪼개서 나눠본 뒤, 더 작은 값을 반환해주면 끝이다
Leave a Reply