본문 바로가기

Algorithm/Baekjoon BOJ

[백준][파이썬] 1439번 : 뒤집기(코드, 해설, 풀이)

반응형

https://www.acmicpc.net/problem/1439

 

1439번: 뒤집기

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모

www.acmicpc.net

 

 

 


- 문제

  처음 입력받은 0001100에서 11을 아니면 000, 00을 얼마나 뒤집어야 같은 숫자의 연속으로 만들 수 있는지 찾는 문제이다. 000과 00을 한 번씩 총 두번 뒤집어서 1111111로 만드는것보다 11을 한 번 뒤집어서 0000000으로 만드는게 더 빠르고 최소한의 뒤집기이므로 출력은 1이 나온다.


- 해설

  주어진 S를 몇번 뒤집어야 연속된 숫자로 바꿀 수 있는지 생각해보아야 한다. 이때 나는 숫자의 변화에 주목했다. 0001100의 경우에는 0에서 1로, 1에서 0으로 총 2번 바뀌어서 출력값이 1이 되었고, 11001100110011000001은 1에서 0으로 4번, 그리고 0에서 1로 4번 바뀌어서 총 8번 바뀌었는데 출력값은 4가 되었다는 것을 확인할 수 있었다. 그러면 숫자가 변한 횟수를 구한 다음에 파이썬의 // 연산을 통해 출력값을 구할 수 있지 않을까? 생각해서 문제를 풀어보았다.

 


- 풀이

import sys
N = (sys.stdin.readline())
basic = N[0]
count = 0
for i in N:
    if basic != i:
        count += 1
        basic = i
print(count//2)

basic 변수에 첫번째 문자를 넣어주고(str값이라 '0' 혹은 '1'을 넣어주게 된다) basic에 들어간 문자와 반복문을 통해 비교한 문자열의 한 문자와 다르면 count를 +1해서 최종적으로 총 몇번 변화하였는지 비교 후 마지막으로 count//2를 통해 몫을 구해주었다.

반응형