🧑💻 [Python] 백준 1439 뒤집기
Gold 5 - 그리디
문자열은 0과 1 밖에 없다
연속된 숫자들을 뒤집는 것이고, 최소한으로 뒤집는 것이 목표
즉 0000011111000001100 은 01010 과 똑같다
문제풀이 (처음 풀이, 틀림)
one
,zero
라는 변수를 만들어 0으로 초기화 시켰다- 문자열을 순회하며, 문자열이 바뀔 때 마다, 1이면
one
에 1을 더하고, 0이면zero
에 1을 더했다 - 경우의 수
one
이 0이고,zero
가 0일 때에, 숫자를 뒤집지 않아도 되서 0을 출력one
만 0이면zero
값인 1을 출력zero
만 0이면,one
값인 1을 출력zero
와one
이 0이 아니면, 둘 중에 작은 것을 출력
문제풀이 (두번째)
- 000001110000110110 은 0101010과 같다
- 즉 문자열을 순회하며, 숫자가 바뀔때마다 count에 1씩 더해주면 된다
- 그리고
count + 1
을 한 것을 2로 나누어, 몫을 출력하면 답이 된다
코드
첫 번째 풀이
numbers = input()
zero = 0
one = 0
if len(numbers) > 1:
for i in range(1, len(numbers)):
if numbers[i] != numbers[i-1]:
if numbers[i-1] == '0':
zero += 1
else:
one += 1
if zero == 0 and one == 0:
print(0)
elif zero == 0:
print(one)
elif one == 0:
print(zero)
else:
print(min(one,zero))
두 번째 풀이
numbers = input()
count = 0
for i in range(len(numbers) - 1):
if numbers[i] != numbers[i+1]:
count += 1
print((count + 1) // 2)
'알고리즘 > 그리디' 카테고리의 다른 글
[Python] 백준 1783 병든 나이트 (0) | 2023.01.29 |
---|---|
[Python] 백준 1026 보물 (0) | 2023.01.27 |
[Python] 백준 1339 단어 수학 (6) | 2023.01.26 |
[Python] 백준 1138 한 줄로 서기 (0) | 2023.01.25 |
[Python] 백준 1715 - 카드 정렬하기 (0) | 2023.01.18 |