반응형
https://www.acmicpc.net/problem/1439
import sys
data = sys.stdin.readline().rstrip()
count0 = 0
count1 = 0
if data[0] == '1':
count0 += 1
else:
count1 += 1
for i in range(len(data) - 1):
if data[i] != data[i+1]:
if data[i+1] == '1':
count0 += 1
else:
count1 += 1
print(min(count0, count1))
이 문제는 구현 아이디어를 떠올리지 못하여 풀이를 참고하며 다시 풀었다. 풀이 방법은 전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우 중에서 더 적은 횟수를 가지는 경우를 계산하면 된다. count0과 count1은 각각 전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우의 수 이다.
s = input()
change = 0
for i in range(len(s)-1):
if s[i] != s[i+1]:
change += 1
if change % 2 == 0:
result = change // 2
else:
result = change // 2 + 1
print(result)
다른 분들의 코드를 확인해보니 이 방법 말고도 수학적인 방법으로 구현할 수도 있었다.
숫자가 변하는 개수를 2로 나누어서 뒤집는 최소 횟수를 구할 수 있다. 다만 변화 개수가 홀수인 경우에는 1을 더해줘야한다.
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 18352 - 특정 거리의 도시 찾기 (0) | 2022.01.16 |
---|---|
[BOJ] 4673 - 셀프 넘버 (0) | 2022.01.14 |
[BOJ] 5622 - 다이얼 (0) | 2022.01.09 |
[BOJ] 1157 - 단어 공부 (0) | 2022.01.06 |
[BOJ] 11047 - 동전 0 (0) | 2021.12.31 |