알고리즘/백준
[백준 파이썬] 1244 스위치 켜고 끄기
rocku
2023. 7. 19. 07:49
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
N = int(input())
states = list(map(int, input().split()))
S = int(input())
students = [list(map(int, input().split())) for _ in range(S)]
for g, idx in students:
if g == 1:
for i in range(idx-1, N, idx):
states[i] = (1<<states[i]) & 1 # 0이면 1로, 1이면 0으로 바꾼다
elif g == 2:
idx -= 1 # 문제에서 번호는 1부터 시작하므로 -1 해준다.
states[idx] = (1<<states[idx]) & 1 # 현재 위치 on/off
for i in range(1, N):
if (idx-i >= 0 and idx+i < N # 현재 위치 중심으로 전체 범위보다 작을 때
and states[idx-i] == states[idx+i]): # 양 옆이 같다면
states[idx-i] = states[idx+i] = (1<<states[idx-i]) & 1 # on/off
else: # 범위를 벗어나거나 서로 다를 경우 종료
break
for i in range(5): # 최대 100개의 스위치가 20개씩 출력되므로
try:
if states[i*20] is not None: # 첫 번째 값이 있는 리스트만 출력
try:
print(*states[i*20 : (i+1)*20]) # 20개가 다 있다면 20개 출력
except:
print(*states[i*20:]) # 아니라면 전체 출력
else:
break
except:
pass