[BOJ-1439] 뒤집기 (Python)

yuseon Lim·2021년 7월 17일
0

Problem Solving

목록 보기
35/37
post-thumbnail

🤒 문제

BOJ-1439 뒤집기

💊 풀이

풀이 1

이 문제는 연속된 0, 연속된 1의 덩어리가 몇개인지 각각 세어서
더 적은 것으로 뒤집으면 최소로 뒤집을 수 있다.

예제로 주어진 0001100을 가지고 split() 함수를 돌리면 각각

`0001100`.split('1') # ['000', '', '00']
`0001100`.split('0') # ['', '', '', '11', '', '']

이렇게 되는데, 공백이 있기 때문에 다시 공백을 빼고 세어주고 0과 1중 더 적은것이 최소로 뒤집는 횟수가 된다.

풀이 2

이 풀이가 문제가 의도한 것이 아닐까 싶은데, 이 문제는 0으로 만들기 위해 1이 연속된 문자열을 뒤집거나, 그 반대이다. 그렇기 때문에 0으로 이루어진 문자열 덩어리, 1로 이루어진 문자열 덩어리의 갯수를 세어서 더 적은것을 뒤집으면 최소횟수로 뒤집어 다 같은 문자로 만들 수 있다.

  1. 입력받은 string 의 처음을 status로 설정한다. status = string[0]

  2. 그 다음 string의 1번째 부터 for문을 돈다.

  3. i번째의 문자가 status와 같다면, 연속된 문자이기 때문에 continue

  4. i번째의 문자가 status와 다르다면, 연속된 문자가 끝난것. status에 해당하는 문자가 계속되어 왔을 것이므로 status가 0이면 zero_cnt를 1 증가시키고, 1이면 one_cnt를 1 증가시킨다.

  5. status를 string[i]로 바꾼다. (string[i]의 연속된 문자열이 시작되므로)

  6. for문을 다 돌면, 마지막 연속된문자열에 대해서는 검사하지 못했으므로, status가 0인지 1인지 판단하여 4번처럼 한다.

  7. zero_cnt, one_cnt중 더 작은 값을 return 한다.

✨ 소스코드

1

def solution(string: str):
    zero_frac = string.split('1')
    one_frac = string.split('0')
    zero_cnt = 0
    one_cnt = 0

    for s in zero_frac:
        if s != '':
            zero_cnt += 1
    for s in one_frac:
        if s != '':
            one_cnt += 1

    return(min(zero_cnt, one_cnt))

string = input()
print(solution(string))

2

def solution(string: str):
    status = string[0]
    zero_cnt = 0
    one_cnt = 0

    for i in range(1, len(string)):
        if status == string[i]:
            continue
        else:
            if status == '0':
                zero_cnt += 1
            if status == '1':
                one_cnt += 1
            status = string[i]
    
    if status == '0': zero_cnt += 1
    if status == '1': one_cnt += 1
    
    return(min(zero_cnt, one_cnt))
    
string = input()
print(solution(string))

profile
🔥https://devyuseon.github.io/ 로 이사중 입니다!!!!!🔥

0개의 댓글