반응형
문제
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 이 문자열 S에 있는 모든 숫자를 전부 같게 만드려고 한다.
S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로 0을 1로 만드는 것을 의미한다.
예시
0001100의 경우, 전체를 뒤집으면 1110011이 되고, 4번째와 5번째 숫자를 뒤집으면 1111111이 된다.
하지만 처음부터 4번째와 5번째 숫자를 뒤집으면 0000000으로 모두 같은 숫자로 만들 수 있다.
문자열 S가 주어졌을 때, 다솜이가 해야 하는 행동의 최소 횟수를 출력하시오.
입력 조건
0과 1로 이루어진 문자열 S가 주어진다.
출력 조건
행동해야할 최소 횟수를 출력
풀이
먼저, 연속된 숫자를 한번에 뒤집는다고 생각하고, 0을 뒤집는 횟수 cnt0, 1을 뒤집는 횟수 cnt1을 선언한다.
이에 문자열의 처음이 0이면 cnt0을 +1하고, 1이면 cnt1을 +1한다. (이미 뒤집는다고 가정하는 것)
이제 문자열 S의 0번 인덱스부터 이웃한 문자가 같은지 확인한다.
같지 않다면 다시 뒤집어야 하는 상황이기 때문에 문자가 1인지 0인지에 따라 cnt0, cnt1을 늘려준다.
그리고 cnt0과 cnt1의 값을 비교해 더 작은 값 (최소 횟수)을 출력한다.
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
int cnt0 = 0;
int cnt1 = 0;
if (s.charAt(0) == '0') cnt0++;
else cnt1++;
for (int i = 0; i < s.length()-1; i++) {
if (s.charAt(i) != s.charAt(i+1)) {
if (s.charAt(i + 1) == '1') cnt0++;
else cnt1++;
}
}
System.out.println(Math.min(cnt0, cnt1));
} // end main
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 럭키 스트레이트 (0) | 2021.06.03 |
---|---|
[Algorithm] 볼링공 고르기 (0) | 2021.06.02 |
[Algorithm] 뱀 (0) | 2021.05.31 |
[Algorithm] 곱하기 혹은 더하기 (0) | 2021.05.31 |
[Algorithm] 모험가 길드 (0) | 2021.05.30 |