이번에 해결해 볼 문제는 백준에 있는 1439번 뒤집기이다.
문제 설명
- 문자열 S가 주어졌을 때 문자열 S는 0과 1로만 이루어져있다.
- 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 행동을 할 수 있다.
- 예를 들어 S = 0001100 일 때,
- index = 0에 위치한 문자 0을 뒤집는 행동을 한다면 S는 1111100으로 뒤집힐 것이다.
- 모두 같은 문자(숫자)로 뒤집기 위한 행동의 최소 횟수를 출력하면 된다.
문제 해결 아이디어
- 연속된 문자열이 적은 문자를 뒤집으면 해결된다.
- 예를 들어 S = 0001100 일 때,
- 0이 연속된 문자열은 2, 1이 연속된 문자열은 1이다.
- 따라서 문자 1을 뒤집으면 된다.
- 문자열을 반복문을 통해 하나씩 돌면서 문자가 바뀌는 횟수를 계산한다.
- 0에서 1로 바뀌는 경우 1에 해당하는 횟수를 증가시킨다.
- 1에서 0으로 바뀌는 경우 0에 해당하는 횟수를 증가시킨다.
- 단, 0에 해당하는 횟수와 1에 해당하는 횟수가 모두 0일 때는 두 경우에 해당하는 횟수를 모두 증가시킨다.
문제 해결 코드
1
2
3
4
5
6
7
8
9
10
11
12
s = input().strip()
count = [0, 0]
for i in range(1, len(s)):
if s[i-1] != s[i]:
if count[0] == 0 and count[1] == 0:
count[int(s[i-1])] += 1
count[int(s[i])] += 1
else:
count[int(s[i])] += 1
print(min(count))