자료구조 및 알고리즘/알고리즘

[알고리즘] 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 문자열 뒤집기

benjykim 2021. 1. 27. 19:00
반응형

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

  • 내 풀이

    만일 "0001100"이라는 문자열이 있다면 이를 ["000", "00"]["11"]로 만들어서, 즉 0으로 구성된 문자열만을 포함한 zero_list와 1로만 구성된 문자열을 포함한 one_list를 만든다. 그러고 나서 요소가 더 적은(["11"]) 리스트를 선택하여 해당 리스트의 길이를 출력한다.

    import sys
    input = sys.stdin.readline
    s = input()
    
    zero_list = []
    one_list = []
    
    result = 0
    tmp = s[0]
    
    for i in range(len(s)-1):
        if s[i] == s[i+1]:
            tmp += s[i+1]
        else:
            if '0' in tmp:
                zero_list.append(tmp)
            else:
                one_list.append(tmp)
            tmp = s[i+1]
        i += 1
    
    if len(zero_list) > len(one_list):
        result = len(one_list)
    else:
        result = len(zero_list)
    
    print(result)
  • 책 풀이

    전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우 중에서 더 적은 횟수를 가지는 경우를 계산한다.

    data = input()
    count0 = 0 # 전부 0으로 바꾸는 경우
    count1 = 0 # 전부 1로 바꾸는 경우
    
    # 첫 번째 원소에 대해서 처리
    if data[0] == '1':
        count0 += 1
    else:
        count1 += 1
    
    # 두 번째 원소부터 모든 원소를 확인하며
    for i in range(len(data) - 1):
        if data[i] != data[i+1]:
            # 다음 수에서 1로 바뀌는 경우
            if data[i+1] == '1':
                count0 += 1
            else:
                count1 += 1
    
    print(min(count0, count1))
반응형