2138: 전구와 스위치

ewillwin·2023년 7월 8일
0

Problem Solving (BOJ)

목록 보기
113/230

  • 첫번째 스위치를 눌렀는 지, 누르지 않았는 지를 분리하여 풀이
  • 첫번째 스위치 이후부터는 이전 전구를 확인하고, 이전 전구가 다르다면 스위치를 켠다 (이전 전구, 현재 전구, 이후 전구를 켬. 단, i == N-1이라면 이후 전구를 켤 수 없음)
    -> 이렇게 이전 전구를 비교하면서 갱신해야 지나온 전구의 상태가 변하지 않음
  • for문이 종료된 후 src와 dest를 string으로 변환하여 비교
import sys
from collections import deque


N = int(input())
src = list(map(int, list(sys.stdin.readline()[:-1]))); src_bu = src.copy()
dest = list(map(int, list(sys.stdin.readline()[:-1])))

# 첫번째 스위치를 누르는 경우
cnt = 0
for i in range(1, N):
    if src_bu[i-1] != dest[i-1]:
        cnt += 1
        src_bu[i] = 1 - src_bu[i]
        src_bu[i-1] = 1 - src_bu[i-1]
        if i != N-1:
            src_bu[i+1] = 1 - src_bu[i+1]

if ''.join(map(str, src_bu)) == ''.join(map(str, dest)):
    print(cnt)
    exit()

# 첫번째 스위치를 누르지 않는 경우
cnt = 1
src[0] = 1 - src[0]; src[1] = 1 - src[1]
for i in range(1, N):
    if src[i-1] != dest[i-1]:
        cnt += 1
        src[i] = 1 - src[i]
        src[i-1] = 1 - src[i-1]
        if i != N-1:
            src[i+1] = 1 - src[i+1]

if ''.join(map(str, src)) == ''.join(map(str, dest)):
    print(cnt)
    exit()

print(-1)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글