스위치
1번부터 연속적으로 번호가 붙어 있는 스위치들이 있다. 스위치는 켜져(1) 있거나 꺼져(0) 있는 상태이다.
학생들에게 1 이상 \(N\) 이하인 자연수를 하나씩 나누어 주었다. 학생들은 자신의 성별/역할과 받은 수에 따라 아래와 같은 방식으로 스위치를 조작하게 된다.
< 처리조건 >
- 남학생 (성별 1): 자기가 받은 수의 배수 번호에 해당하는 스위치들의 상태를 바꾼다. (켜져 있으면 끄고, 꺼져 있으면 켠다.)
- 여학생 (성별 2): 자기가 받은 수 번호의 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서, 그 구간에 속한 모든 스위치의 상태를 바꾼다. (구간의 스위치 개수는 항상 홀수이다.)
- 관리학생 (성별 3): 자기가 받은 수 \(NUM\)번 스위치를 기준으로 좌우 2칸 범위(\(NUM-2\)번부터 \(NUM+2\)번까지)에 속한 모든 스위치의 상태를 바꾼다. (단, 1번 미만이거나 \(N\)번을 초과하는 스위치 번호는 무시한다.)
입력으로 스위치들의 처음 상태가 주어지고, 각 학생의 성별/역할과 받은 수가 주어진다.
학생들이 입력되는 순서대로 스위치의 상태를 바꾸었을 때, 스위치들의 마지막 상태를 출력하는 함수 change_male change_female change_manager 을 작성하시오.
함수를 사용하는 코드
작성한 함수는 아래 코드와 함께 실행된다.
n = int(input())
switches = [0] #1-based
for x in input().split():
switches.append(int(x))
k = int(input())
for _ in range(k):
gender, num = map(int, input().split())
if gender == 1:
change_male(switches, num)
elif gender == 2:
change_female(switches, num)
elif gender == 3:
change_manager(switches, num)
n = len(switches) - 1
for i in range(1, n + 1):
print(switches[i], end=" ")
if i % 20 == 0:
print()
if n % 20 != 0:
print()
위 코드가 정상적으로 동작하도록 함수를 직접 정의한다. 제출할 때는 작성한 함수의 정의 전체만 제출한다.
입력
첫째 줄에는 스위치의 개수 \(N\)이 주어진다. (\(1 \le N \le 100\))
둘째 줄에는 각 스위치의 상태가 1번부터 차례대로 주어진다. (켜짐: 1, 꺼짐: 0)
셋째 줄에는 학생 수 \(K\)가 주어진다. (\(1 \le K \le 100\))
넷째 줄부터 \(K\)개의 줄에 걸쳐 학생의 성별/역할(1, 2, 3 중 하나)과 받은 수 \(NUM\)이 공백으로 구분되어 주어진다. (\(1 \le NUM \le N\))
출력
스위치의 상태를 1번 스위치부터 마지막 스위치까지 한 줄에 20개씩 공백으로 구분하여 출력한다.
예제 입력 1
8
0 1 0 1 0 0 0 1
3
1 3
2 3
3 6
예제 출력 1
1 0 0 1 0 0 1 0
코멘트