728x90
<문제 링크>
https://www.acmicpc.net/problem/1439
<문제 풀이>
- 0에서 1로, 1에서 0으로 바뀌는 지점을 파악하여 연속된 0과 1의 개수를 파악한다.
- s의 범위를 파악해야 하므로 바뀌는 지점을 담는 변수 change 첫 번째 값에 0을, 마지막 값에 s의 길이를 넣는다.
- 0과 1 중 연속된 값이 적은 것을 파악하여 개수를 출력한다.
<코드>
'''입력 예제
0001100
11111
00000001
1100110011001100001
11101101
'''
s = input()
change = [0]
for i in range(1, len(s)):
if s[i - 1] != s[i]:
change.append(i)
change.append(len(s))
zeros = []
ones = []
for i in range(len(change)-1):
if s[change[i]] == '1':
ones.append(s[change[i]:change[i + 1]])
else:
zeros.append(s[change[i]:change[i + 1]])
result = min(len(ones),len(zeros))
print(result)
#220321
s = input()
count = {'0':0, '1':0}
count[s[0]] += 1
r = s[0]
for i in s:
if i!=r:
count[i] += 1
r = i
print(min(count.values()))
<고쳐야 할 점>
- 좀 더 간결하게 코드를 작성할 수 있음
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[구현] 난이도1, 이취코 113p '시각' (Python) (0) | 2021.11.25 |
---|---|
[구현] 난이도1, 이취코 110p '상하좌우' (Python) (0) | 2021.11.25 |
[다익스트라] 난이도2, USACO '숨바꼭질' (Python) (0) | 2021.11.24 |
[플로이드워셜] 백준 11404번 '플로이드' (Python) (0) | 2021.11.24 |
[플로이드워셜] 난이도2, M 기업 코딩테스트 '미래 도시' (Python) (0) | 2021.11.24 |