프로그래밍/백준

[알고리즘] 백준 15729 파이썬 - 방탈출

매 석 2022. 12. 24. 15:51
반응형

 

 

15729번: 방탈출

첫째 줄에 N(1 ≤ N ≤ 1,000,000)가 주어지고 둘째 줄에는 쪽지에 적혀 있는 N자리의 수가 빈 칸을 사이에 두고 주어진다.

www.acmicpc.net

문제

방탈출 게임을 하던 혜민이는 마지막 문제에 봉착했다. 단서는 다음과 같다.

  1. 앞에는 일렬로 놓여진 N개의 버튼이 모두 불이 꺼진 상태로 있다.
  2. 0 또는 1로 구성되어 있는 N자리 수가 적힌 쪽지가 있다.
  3. 0은 불이 꺼진 버튼, 1은 불이 켜진 버튼을 뜻한다.
  4. 불이 켜져 있는 버튼을 누르면 불이 꺼지고, 불이 꺼져 있는 버튼을 누르면 불이 켜진다.
  5. 버튼을 누르면 그 버튼 뿐만이 아닌 오른쪽 두 개의 버튼도 같이 눌린다. 

혜민이는 현재 모두 불이 꺼진 상태에서 버튼을 최소로 눌러서 쪽지와 똑같은 상태로 만들어야 한다는 것을 알아냈다! 혜민이를 도와줘서 방탈출 게임에 성공하자.

 

문제풀이

n=int(input())
arr=list(map(int,input().split()))
#01
tmp=[False]*n
cnt=0
for i in range(n):
	#02
    if arr[i]!=tmp[i]:
        cnt+=1
        tmp[i]=not tmp[i]
        if i+1<n:
            tmp[i+1]=not tmp[i+1]
        if i+2<n:
            tmp[i+2]=not tmp[i+2]
print(cnt)

- #01 : 입력을 받은 후 tmp 즉 초기 모두 불이 꺼진 상태의 리스트를 만들어준다.

           개수를 체크할 cnt라는 변수도 0으로 설정해준다.

- #02 : 만약 입력받은 arr[i]와 tmp[i]값이 다르다면 버튼을 눌러야되니 cnt에 1을 더한다.

           tmp[i]의 값을 False이면 True로 True이면 False로 바꿔준다.

           tmp[i+1]와 tmp[i+2]도 indexerror가 발생하지 않는 범위이면 tmp[i]처럼 바꿔준다.

          최종 cnt값을 출력해준다.