1. 문제

2138번: 전구와 스위치

2. 개요

일렬로 늘어선 전구, 스위치들이 있다.

스위치를 누르면 해당 위치를 포함해 앞, 뒤의 세 전구의 상태가 변한다.

양 끝의 스위치를 누르면 해당 위치의 전구와 앞 또는 뒤의 두 전구의 상태가 변한다.

현재 전구의 상태와 결과로 만들어야 할 전구가 입력으로 주어졌을 때, 스위치를 몇 번 조작해 만들 수 있는지를 구하는 문제.

3. 코드 및 추가내용

왼쪽 → 오른쪽으로 진행하며 맨 앞의 스위치를 제외하고 생각해보자.

첫 전구에 영향을 줄 수 있는 것은 두번째 스위치밖에 없다.

해당 위치의 현재 전구의 상태가 결과값과 다르다면 그 스위치를 눌러야만 한다.

이런 상황이 되면 다음의 전구도 같은 상황이 된다. 이제 두 번째 전구의 상태에 영향을 줄 수 있는 것은 세 번째 스위치밖에 없게 된다.

즉 처음에 첫 스위치가 작동하느냐 마느냐가 정해지면 그 다음 스위치를 눌러야하는지 말아야하는지를 정해나가기만 하면 된다.

import sys

N = int(sys.stdin.readline())

bulbs = list(map(int,sys.stdin.readline().rstrip()))
result = list(map(int,sys.stdin.readline().rstrip()))
ans = 0

for i in range(2):
    ans = 0
    tmp = [b for b in bulbs]
    if i == 1:
        tmp[0], tmp[1] = (tmp[0] + 1) % 2, (tmp[1] + 1) % 2
        ans += 1
    for j in range(1, N-1):
        if tmp[j-1] != result[j-1]:
            for k in range(j-1, j+2):
                tmp[k] = (tmp[k] + 1) % 2
            ans += 1
    
    if tmp[-2] != result[-2]:
        tmp[-2], tmp[-1] = (tmp[-2] + 1) % 2, (tmp[-1] + 1) % 2
        ans += 1

    if tmp == result:
        print(ans)
        sys.exit()

print(-1)

Comments