-문제 : 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))

+ Recent posts