이해
- 0과 1로만 이루어진 문자열이 주어질 때, 문자열에 있는 모든 숫자를 전부 같게 만들어야 한다.
- 문자열에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 행동만 할 수 있다.
- 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.
- 예를 들어 문자열이 “0001100”일 때, 전체를 뒤집으면 “1110011”이 되고 4번째 문자부터 5번째 문자까지 뒤집으면 “1111111”이 된다. 하지만 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 “0000000”이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.
- 문자열이 주어졌을 때, 문자열에 있는 모든 숫자를 전부 같게 만들기 위해 해야하는 행동의 최소 횟수를 출력하라.
계획
- 연속된 1들을 모두 뒤집거나 연속된 0들을 모두 뒤집는 경우 중에 행동의 횟수가 더 작은 값을 출력한다.
- 연속된 1이 몇 세트 있는지, 연속된 0이 몇 세트 있는지를 구해준 후 비교한다.
실행
s = input()
count = [0, 0]
l = len(s)
for i in range(l):
if (i == l - 1 and s[i-1] != s[i]) or i == l - 2 or (i != l - 1 and s[i] != s[i + 1]):
count[int(s[i])] += 1
print(min(count))
개선
- 길이에 관계없이 문자가 바뀌는지만 보면 되기 때문에 “0001100”은 “010”으로 보고 0과 1중에서 숫자의 개수가 더 적은 개수를 출력해주면 된다.
- 연속된 1과 0의 세트의 수를 모두 구해준 다음에 절반으로 나눠준다.
s = input()
count = 0
for i in range(len(S)-1):
if s[i] != s[i+1]:
count += 1
print((count + 1) // 2)
회고
- 다른 사람의 풀이를 보니 쉬운 문제라도 효율적으로 문제를 풀 수 있도록 많이 고민해봐야 겠다고 생각했다. 문제를 잘 풀었어도 다른 사람들의 풀이를 찾아보고 내 코드를 개선해보는 시간을 꼭 가져야 겠다.