• 문제 링크
1439번: 뒤집기
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모
www.acmicpc.net
• 풀이 과정
예제 입력 4를 예시로 들자면,
1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 1 |
1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 |
1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 |
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 |
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |
위와 같이 부분적으로 뒤집어 점진적으로 뒤집는 크기를 늘려갈 때 최소 4회에 걸쳐 뒤집을 수 있다.
하지만 이는 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 1 와 같이 단순히 연속된 토큰을 뒤집는 것과 4회로 횟수가 같다.
따라서 StringTokenizer 를 활용하여 연속된 1의 토큰 수와 0의 토큰 수 중 작은 값을 구해 정답으로써 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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();
StringTokenizer one = new StringTokenizer(s, "0");
StringTokenizer zero = new StringTokenizer(s, "1");
bw.write(String.valueOf(Math.min(one.countTokens(), zero.countTokens())));
bw.flush();
}
}
아래는 StringTokenizer 대신 직접 구현한 코드이다.
성능에선 근소하게 나마 앞섰지만 같은 수준이라고 보아도 무방했다.
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));
char[] arr = br.readLine().toCharArray();
int one = 0;
int zero = 0;
if (arr[0] == '1')
one++;
else
zero++;
for (int i = 1; i < arr.length; i++) {
if (arr[i - 1] != arr[i]) {
if (arr[i] == '1')
one++;
else
zero++;
}
}
bw.write(String.valueOf(Math.min(one, zero)));
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 11000 강의실 배정 - Greedy / Java (0) | 2022.11.18 |
---|---|
[백준] 2847 게임을 만든 동준이 - Greedy / Java (0) | 2022.11.17 |
[백준] 11501 주식 - Greedy / Java (0) | 2022.11.15 |
[백준] 10162 전자레인지 - Greedy / Java (0) | 2022.11.14 |
[백준] 5585 거스름돈 - Greedy / Java (0) | 2022.11.13 |
댓글