🐸 문제 정보
🤖 알고리즘
그리디
⏱️ 풀이 시간
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)
'PS > 문제풀이' 카테고리의 다른 글
백준 1138 한 줄로 서기 Python (1) | 2024.01.28 |
---|---|
백준 2075 N번째 큰 수 Python (1) | 2024.01.27 |
백준 2304 창고 다각형 Python (0) | 2024.01.26 |
백준 15989 1, 2, 3 더하기 4 Python (0) | 2024.01.24 |
백준 20006 랭킹전 대기열 Python (1) | 2024.01.24 |