[BOJ] Q2138 전구와 스위치

Question

Language: Python

Difficulty: Gold 5

해당 문제는 서로 연속된 전구에 영향을 줄 수 있다는 점에서 인접한 전구에 대한 스위치 작동 여부 판단이 중요하다.

아래의 그림을 보면, 특정 스위치를 작동시키면 좌/우 전구까지 상태가 바뀌기 때문에, 이를 고려해서 스위치를 동작시켜야한다.

q2138_1

만일, 이전 전구의 상태가 만들고자 하는 전구의 상태와 다른 경우에만 해당 위치의 스위치를 동작시키도록 한다. 이런식으로 1~N 번까지의 index을 조사하면서 특정 상태의 전구를 만들수 있는지 확인한다.

q2138_2

Solution

from math import inf
def change_status(arr,index):
    if index >0:
        arr[index-1]=1-arr[index-1]
    arr[index]=1-arr[index]
    if index<n-1:
        arr[index+1]=1-arr[index+1]

def solution():
    for i in range(2):
        temp=before[:]
        count=0
        if i==1:
            change_status(temp,0)
            count+=1

        for index in range(1,n):
            if temp[index-1]!=after[index-1]:
                change_status(temp,index)
                count+=1

        if temp == after:
            print(count)
            return
    print(-1)
if __name__ == "__main__":
    n=int(input())
    before=list(map(int,input().strip()))
    after=list(map(int,input().strip()))
    
    solution()

댓글남기기