티스토리 뷰
https://www.acmicpc.net/problem/2138
문제
N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 있는 전구는 켜지고, 켜져 있는 전구는 꺼지게 된다. 1번 스위치를 눌렀을 경우에는 1, 2번 전구의 상태가 바뀌고, N번 스위치를 눌렀을 경우에는 N-1, N번 전구의 상태가 바뀐다.
N개의 전구들의 현재 상태와 우리가 만들고자 하는 상태가 주어졌을 때, 그 상태를 만들기 위해 스위치를 최소 몇 번 누르면 되는지 알아내는 프로그램을 작성하시오.
코드
import sys
n = int(sys.stdin.readline())
before = list(map(int, sys.stdin.readline().rstrip()))
after = list(map(int, sys.stdin.readline().rstrip()))
def switch(s, cnt):
if cnt == 1:
s[0] = 1 - s[0]
s[1] = 1 - s[1]
for i in range(1, n):
if s[i - 1] != after[i - 1]:
cnt += 1
s[i - 1] = 1 - s[i - 1]
s[i] = 1 - s[i]
if i != n - 1:
s[i + 1] = 1 - s[i + 1]
if s == after:
return cnt
return -1
result1 = switch(before[:], 0)
result2 = switch(before[:], 1)
if result1 >= 0 and result2 >= 0:
sys.stdout.write(str(min(result1, result2)))
elif result1 >= 0 and result2 < 0:
sys.stdout.write(str(result1))
elif result1 < 0 and result2 >= 0:
sys.stdout.write(str(result2))
else:
sys.stdout.write("-1")
풀이
첫번째 스위치를 눌렀을 경우와 안눌렀을 경우 두번을 계산해 두 경우 중 양의 정수가 있으면 더 작은 수를 출력하고 없으면 -1 을 출력한다.
'학습 내용 > 백준 문제풀이' 카테고리의 다른 글
백준 1202 파이썬 - 보석 도둑 (0) | 2022.06.30 |
---|---|
백준 1285 파이썬 - 동전 뒤집기 (0) | 2022.06.29 |
백준 1080 파이썬 - 행렬 (0) | 2022.06.28 |
백준 11399 파이썬 - ATM (0) | 2022.06.27 |
백준 1931 파이썬 - 회의실 배정 (0) | 2022.06.25 |