알고리즘/백준

[백준 파이썬] 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