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
위와 같이 입력이 주어질 경우, 아래와 같이 해석할 수 있다.
위 그림은 처음에 전구는 다 꺼져있는 상태이다.
그 다음 그림은 첫 번째 명령어를 수행한 결과이다.
두 번째 명령어를 수행한 결과이다.
마지막 명령어를 수행한 결과이다.
문제풀이
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
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[백준/21941] 문자열 제거 - 파이썬(Python) (0) | 2022.04.05 |
---|---|
[백준/21921] 블로그 - 파이썬(Python) (0) | 2022.03.28 |
[백준/11057] 오르막 수 - 파이썬(Python) (0) | 2022.03.23 |
[백준/2579] 계단 오르기 - 파이썬(Python) (0) | 2022.03.22 |
[백준/11726] 2×n 타일링 - 파이썬(Python) (0) | 2022.03.22 |
댓글