KEEP GOING
[python] 백준 2138번 : 전구와 스위치 본문
반응형
https://www.acmicpc.net/problem/2138
n = int(input())
bulb = list(map(int, input()))
target = list(map(int, input()))
def change(A, B):
L = A[:]
press = 0
for i in range(1, n):
# 이전 전구가 같은 상태면 pass
if L[i-1] == B[i-1]:
continue
# 상태가 다를 경우
press += 1
for j in range(i-1, i+2):
if j<n:
L[j] = 1 - L[j]
return press if L == B else 1e9
# 첫번째 전구의 스위치를 누르지 않는 경우
res = change(bulb, target)
# 첫번째 전구의 스위치를 누르는 경우
bulb[0] = 1 - bulb[0]
bulb[1] = 1 - bulb[1]
res = min(res, change(bulb, target) + 1)
print(res if res != 1e9 else -1)
[Hint]
1. 첫번째 스위치를 누르는 경우와 누르지 않는 경우로 분리한다.
2. 첫번째(index = 0)를 제외한 1번째부터 마지막 번호를 i라고 했을때, i-1 번째에 있는 스위치가 target 스위치의 값과 같은지 비교한다.
3. 만약 값이 다르다면 i-1, i, i+1 번째 위치의 값을 반전시켜준다. 이때 마지막 위치에 스위치는 i+1 번째가 없기 때문에 구현할 때 주의한다.
반응형
'code review > greedy' 카테고리의 다른 글
[python] 백준 17086번 : 아기상어2 (0) | 2022.01.23 |
---|---|
[python] 백준 1244번 : 스위치 켜고 끄기 (0) | 2022.01.22 |
[python] 백준 2885번 : 초콜릿 식사 (0) | 2022.01.20 |
[python] 백준 1191번 : 흙길 보수하기 (0) | 2022.01.19 |
[python] 프로그래머스 42891번 : 무지의 먹방 라이브 (heapq 사용) (0) | 2022.01.07 |
Comments