-문제 : https://www.acmicpc.net/problem/1439
-정답풀이 :
숫자가 0,1 밖에 없으므로 0에서 1로(one), 1에서 0으로(zero) 바뀌는 지점만 세면된다고 생각했다.
예제를 위 논리로 구해보니까 웬만해선 one과 zero가 같은 거다.
다른 경우는 000001과 같이 하나만 바꾸면되는 경우. 이럴 때는 one == 1 이지만, zero ==0 이다. 그래서
이 경우를 제외한 모든 경우는 one과 zero가 같다고 생각해서 마지막에 max로 출력했다.
틀릴 줄 알았는데 금방 맞혔던 문제다
data=list(input())
n=len(data)
zero,one= 0,0
for i in range(1,n):
if data[i-1]=='0' and data[i]=='1':
one+=1
if data[i-1]=='1' and data[i]=='0':
zero+=1
print(max(zero,one))
-다른 풀이
이 풀이는 나동빈 코테 책에서 공부했던 거다.
숫자가 0,1 밖에 없으므로 숫자가 바뀌는 지점을 기준으로 생각하면된다
해당위치에 있는 숫자가 0이면 모두 1로 바꾸는 경우(one)를 세고,
숫자가 1일 때 모두 0으로 바꾸는 경우(zero)를 센다
0이 1로 바뀌는 횟수와 1이 0으로 바뀌는 횟수 중 최솟값을 출력하면 정답이다
data=input()
zero=0 #전부 0으로 바뀌는 경우
one=0 #전부 1로 바뀌는 경우
if data[0]=='1':
zero+=1
else:
one+=1
for i in range(len(data)-1): #0부터 len(data)-2까지 반복문 돌림 -> 실제로는 1부터 len(data)-1까지 반복문 수행
if data[i] != data[i+1]:
if data[i+1] =='1': #i번째가 '0'이었다는 의미
zero+=1
else:
one+=1
print(min(zero,one))
'백준 > Greedy' 카테고리의 다른 글
[그리디/백준] 16953번: A -> B (0) | 2022.07.01 |
---|---|
[그리디/백준] 1202번: 보석 도둑 (0) | 2022.07.01 |
[그리디/백준] 1339번 : 단어 수학 (0) | 2022.06.29 |
[그리디/백준] 4796번: 캠핑 (0) | 2022.06.29 |
[그리디/백준] 1715번: 카드 정렬 (0) | 2022.06.29 |