주어진 문제에 맞게 버튼을 켜고 꺼서 동일한 모양을 만드는 문제입니다.
이때, 버튼을 누르면 오른쪽 두개의 버튼도 동시에 켜지거나 꺼집니다.
간단한 문제이지만... 문제를 잘못읽고 한참 헤맨...
그리디 알고리즘에 맞게 왼쪽 버튼부터 확인하면서
주어진 문제와 다른 경우 켜거나 끄면 됩니다.
이때 모든 버튼은 처음에 0으로 초기화 되기때문에,
0인 경우 1, 1인 경우 0 으로 따로 바꿔 줄 필요 없이, not
을 사용하여 상호 변환 하여줍니다.
def main():
N = int(input())
targets = list(map(int, input().split()))
buttons = [0] * N
count = 0
for idx, target in enumerate(targets):
if buttons[idx] != target:
count += 1
buttons[idx:idx+3] = map(lambda x: not x, buttons[idx:idx+3])
print(count)
if __name__ == "__main__":
main()
이 문제에서는 한 버튼을 누르면 그 버튼의 오른쪽 두 버튼 모두 켜지거나 꺼지게 됩니다.
따라서 반복문 안에서 오른쪽 두개의 버튼을 조작할 때,
만약 현재 버튼이 오른쪽 끝에서 두번째 안에 있는 버튼이라면
out of range
에러가 발생할 수 있습니다.
따라서 범위를 매번 확인해줘야하 하는데,
이때 list slicing
을 사용하면 간단하게 해결 할 수 있습니다.