공부하기/백준

[Python] 백준 풀기 1439 - 뒤집기

XEV 2022. 12. 21. 22:21

파이썬 백준 1439번

실버 5

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

 

1439번: 뒤집기

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

www.acmicpc.net

 

 

문제 보기

분류: 문자열, 그리디 알고리즘

 

 

 

 

 

문제 풀기

0 과 1 조합의 숫자들을 리스트에 각각 입력받는다.

숫자들의 맨 앞과 맨 끝의 수가 같은지 확인을 한다. 만약, 같다면 그 반대되는 수를 기준으로 하여 check 에 저장해 둔다. 이때, count 는 0 으로 시작.

숫자들의 맨 앞과 맨 끝의 수가 다르다면, 첫 수와 반대되는 수를 check 에 저장한다. 이때, count 는 1 로 시작.

그리고, 01 문자열 리스트에서 하나씩 빼내어가면 0 에서 1 또는 1 에서 0 으로 전환되는 시점을 temp 에 저장해 두고 check 와 비교하여 다른 경우에만 count 를 하나씩 늘려 나간다.

 

 

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline


def fnFlip():
    if s[0] == s[-1]:
        check = abs(s[0] - 1)
        # print(check)            # test print
        count = 0
    elif s[0] != s[-1]:
        check = abs(s[0] - 1)
        # print(check)            # test print
        count = 1
    
    
    temp = s[0]
    for i in range(1, len(s)):
        if s[i - 1] != s[i]:
            temp = s[i]
            if check != s[i]:
                count += 1
    
    print(count)


if __name__ == "__main__":
    s = list(map(int, inputdata().strip()))
    # print(s)            # test print
    
    fnFlip()