switch_num = int(input()) # 스위치 개수
switch_state = list(map(int, input().split())) # 스위치 상태
student = int(input()) # 학생 수
student_info = [list(map(int, input().split())) for _ in range(student)] # 학생 성별과 받은 숫자
for i in range(student): # 학생 수만큼 반복
num = student_info[i][1] # 현재 학생이 받은 숫자
if student_info[i][0] == 1: # 남학생이라면
for j in range(switch_num): # 스위치 개수만큼 반복
if (j+1) % num == 0: # 스위치 번호가 num의 배수라면 스위치 상태 변경
switch_state[j] = abs(switch_state[j] - 1)
else: continue
else: # 여학생이라면
j = 0
# num을 중심으로 좌우 대칭범위가 0 이상 마지막 인덱스 이하일때
while num - (j+2) >= 0 and num + j < switch_num:
if switch_state[num - (j+2)] != switch_state[num + j]: # 좌우가 대칭이 아니라면 반복문 종료
break
else: # 대칭일경우 상태 변경
switch_state[num - (j+2)] = abs(switch_state[num - (j+2)] - 1)
switch_state[num + j] = abs(switch_state[num + j] - 1)
j += 1 # 다음 칸으로 범위 넓히기
switch_state[num-1] = abs(switch_state[num-1] - 1) # num에 해당하는 스위치 상태 변경
result = ''
for i in range(switch_num): # 스위치 20개씩 끊어서 출력하기
result += f"{switch_state[i]} "
if (i + 1) % 20 == 0: # 20의 배수라면 줄바꿈 추가
result += '\n'
print(result)
https://www.acmicpc.net/problem/1244
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 3107 : IPv6 (0) | 2024.04.02 |
---|---|
[백준] 파이썬 2615 : 오목 (0) | 2024.04.02 |
[백준] 파이썬 16926번: 배열 돌리기 1 (0) | 2024.04.01 |
[백준] 파이썬 1652번: 누울 자리를 찾아라 (0) | 2024.04.01 |
[백준] 파이썬 1018번: 체스판 다시 칠하기 (0) | 2024.04.01 |