https://www.acmicpc.net/problem/1439
1439번: 뒤집기
다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모
www.acmicpc.net
[ 내 코드 ]
num_list = list(input())
count = 0
for i in range(len(num_list)):
if i == 0:
first = num_list[i]
elif i == 1:
if first != num_list[1]:
count += 1
else:
if num_list[i] != num_list[i-1]:
count += 1
if count == 1:
print(1)
elif count == 0:
print(0)
elif count % 2 != 0:
print(int(count / 2) + 1)
else :
print(int(count / 2))
[ 클린 코드 ]
data = input()
count0 = 0 # 전부 0으로 바꾸는 경우
count1 = 0 # 전부 1로 바꾸는 경우
if data[0] == '1':
count0 += 1
else:
count1 += 1
for i in range(len(data) - 1):
if data[i] != data[i + 1]:
# 다음 수에서 1로 바뀌는 경우
if data[i + 1] == '1':
count0 += 1
# 다음 수에서 0으로 바뀌는 경우
else:
count1 += 1
print(min(count0, count1))
- 문자열에 있는 숫자를 모두 0 혹은 모두 1로 만들어야 한다.
- 다음의 두 가지 경우를 모두 계산하면 된다.
- 문자열 S의 길이는 100만 이하이므로, 시간 복잡도는 O(N)에 해결해야 한다.
- 모두 0으로 만드는 경우
- | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 1
- 모두 1로 만드는 경우
- | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 2
- 모두 0으로 만드는 경우
- 구체적인 알고리즘 예시) 모두 1로 만드는 경우
- 첫 번째 원소가 0인 경우
- 2개씩 원소를 비교할 때, 1에서 0으로 바뀌는 경우
- | 0 | 0 | 0 | 1 | 1 | 0 | 0 | => 횟수 2
'~2023.02 > 백준 문제풀이' 카테고리의 다른 글
[Python] 백준 1092번 : 배 (0) | 2022.03.11 |
---|---|
[Python] 백준 2012번 : 등수 매기기 (0) | 2022.03.09 |
[Python] 백준 5585번 : 거스름돈 (0) | 2022.03.09 |
[JAVA] 백준 단계별로 풀어보기_5단계(1차원 배열) (0) | 2022.02.11 |
[JAVA] 백준 단계별로 풀어보기_4단계(while문) (0) | 2022.02.08 |