본문 바로가기

알고리즘

[Python] BOJ 백준 21918번 전구

문제


N개의 전구가 있고 맨 왼쪽에 있는 전구를 첫 번째라고 하자. 전구의 상태는 두 가지가 있으며 이를 숫자로 표현한다.

 1은 전구가 켜져 있는 상태를 의미하고, 0은 전구가 꺼져 있는 상태를 의미한다.

전구를 제어하는 명령어가 1번부터 4번까지 4개가 있다. 아래 표는 각 명령어에 대한 설명이다.

모든 명령어를 수행한 후 전구가 어떤 상태인지 출력한다.


풀이


이 문제는 단순 하드코딩으로 풀 수 있는 문제였다. 들어온 명령에 따라서 비트 연산으로 반전 시키는 법도 존재한다고 한다.

import sys

si = sys.stdin.readline
n, m = map(int, si().split())

arr = list(map(int, si().split()))


def command(c):
    global arr
    if c[0] == 1:
        arr[c[1] - 1] = c[2]
    elif c[0] == 2:
        for idx in range(c[1] - 1, c[2]):
            if arr[idx] == 0:
                arr[idx] = 1
            else:
                arr[idx] = 0
    elif c[0] == 3:
        for j in range(c[1] - 1, c[2]):
            arr[j] = 0
    elif c[0] == 4:
        for k in range(c[1] - 1, c[2]):
            arr[k] = 1


for i in range(m):
    line = list(map(int, si().split()))
    command(line)

for ans in arr:
    print(ans)