[백준] 2138 - 전구와 스위치
1. 문제
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