프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 2138 전구와 스위치 Python

중규리 2024. 1. 26. 11:53

🐸 문제 정보

 

2138번: 전구와 스위치

N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져

www.acmicpc.net

 

🤖 알고리즘

그리디

 

⏱️ 풀이 시간

failed

 

📝 풀이

dp로 풀다가 도저히 모르겠어서 찾아보니 그리디였다........

그리디로 푸는 방법은 생각보다 간단했다.

직전 전구만 비교하되, 첫 번째 전구의 경우에는 직전 전구가 없기 때문에

첫번째 전구를 건들지 않고 시작한 경우와 / 첫번째 전구를 건들고 시작한 경우

두개로 나눠서 비교하면 되는 문제였다.

 

🧑‍💻 나의 답

import sys
input = sys.stdin.readline

n = int(input().rstrip())
bef = list(map(int, list(input().rstrip())))
obj = list(map(int, list(input().rstrip())))
res = []

def change(temp):
    cur = bef[:]
    for i in range(1, n):
        if cur[i - 1] != obj[i - 1]:
            temp += 1
            for j in range(i - 1, i + 2):
                if j < n: cur[j] = 1 - cur[j]
    if cur == obj:
        return temp
    return sys.maxsize

res.append(change(0))

bef[0] = 1 - bef[0]
bef[1] = 1 - bef[1]
res.append(change(1))
ans = min(res)

if ans == sys.maxsize:
    print(-1)
else:
    print(ans)