Unborn 8.0 Yellow Pointer
본문 바로가기
프로그래밍/Python

[백준/21918] 전구 - 파이썬(Python)

by 에삐니 2022. 3. 27.
728x90

문제

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

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

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

1번 명령어 [i x] (1≤i≤N,0≤x≤1)  i 번째 전구의 상태를 x로 변경한다.
2번 명령어 [l r] (1≤l≤r≤N)  l번째부터 r번째까지의 전구의 상태를 변경한다. (켜져있는 전구는 끄고, 꺼져있는 전구는 킨다.)
3번 명령어 [l r] (1≤l≤r≤N)  l번째부터 r번째까지의 전구를 끈다.
4번 명령어 [l r] (1≤l≤r≤N)  l번째부터 r번째까지의 전구를 킨다.

주어지는 명령어를 다 수행한 결과 전구는 어떤 상태인지 알아보자.

입력

첫 번째 줄에 전구의 개수 N와 입력되는 명령어의 개수 M이 주어진다.

두 번째 줄에는 N개의 전구가 현재 어떤 상태 s인지 주어진다. (0은 꺼져있는 상태, 1은 켜져 있는 상태)

 3 번째 줄부터 M+2 번째 줄까지 세 개의 정수 a,b,c가 들어온다.

 a a번째 명령어를 의미하고 b,c a가 1인 경우는 각각 i,x를 의미하고 a 2,3,4 중 하나면 각각 l,r을 의미한다.

출력

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

제한

  •  1≤N,M≤4,000
  •  1≤a≤4
  •  0≤s,x≤1
  •  1≤l≤r≤N
  •  1≤i≤N

예제 입력 1

8 3
0 0 0 0 0 0 0 0
1 2 1
1 4 1
2 2 4

예제 출력 1

0 0 1 0 0 0 0 0

위와 같이 입력이 주어질 경우, 아래와 같이 해석할 수 있다.

위 그림은 처음에 전구는 다 꺼져있는 상태이다.

그 다음 그림은 첫 번째 명령어를 수행한 결과이다.

두 번째 명령어를 수행한 결과이다.

마지막 명령어를 수행한 결과이다.

 

21918번: 전구

$N$개의 전구가 있고 맨 왼쪽에 있는 전구를 첫 번째라고 하자. 전구의 상태는 두 가지가 있으며 이를 숫자로 표현한다. $1$은 전구가 켜져 있는 상태를 의미하고, $0$은 전구가 꺼져 있는 상태를

www.acmicpc.net


문제풀이

import sys
input = sys.stdin.readline

def states_bulb(com, a, b):
    if com == 1 :
        bulbs[a] = b
    elif com == 2:
        for i in range(a, b):
            bulbs[i] = 0 if bulbs[i] == 1 else 1
    elif com == 3:
        bulbs[a:b] = [0] * (b - a)
    elif com == 4:
        bulbs[a:b] = [1] * (b - a)


N, M = map(int, input().split())
bulbs = list(map(int, input().split()))
for _ in range(M):
    command, l, r = map(int, input().split())
    states_bulb(command, l-1, r)

print(*bulbs)

명령어가 3 또는 4의 경우 반복문을 사용해서 구간의 값을 변경할 경우, 슬라이싱을 통한 구간 안의 값들을 변경하는 것보다 시간이 오래 걸리는 것을 확인할 수 있었습니다.

728x90
반응형

댓글