백준 문제 링크
스위치 켜고 끄기
- 성별이 남자인 경우는 range(현재스위치-1, N, 현재스위치)를 통해
값을 다 바꿔주면 된다.- 성별이 여자인 경우는 [현재 스위치-i, 현재 스위치+i]가 범위 안에 있을 때
i를 계속 늘려가며 두 값이 같다면 값을 바꿔주는 식으로 진행했다.- 마지막으로 문제에서 말한
'스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.'라는 조건에 맞춰 출력했다.
import sys
N = int(sys.stdin.readline())
x = list(map(int, sys.stdin.readline().split()))
student = int(sys.stdin.readline())
for _ in range(student):
a, b = map(int, sys.stdin.readline().split())
now = b
if a == 1:
for i in range(now-1, N, now):
if x[i] == 1:
x[i] = 0
else:
x[i] = 1
else:
i = 0
while (now-i-1 >= 0 and now+i-1 < N):
if x[now-i-1] == x[now+i-1]:
if x[now-i-1] == 1:
x[now-i-1] = 0
x[now+i-1] = 0
else:
x[now-i-1] = 1
x[now+i-1] = 1
i += 1
else:
break
count = 0
for i in x:
if(count % 20 == 0 and count != 0):
print()
print(int(i), end=" ")
count += 1
N = int(input())
x = list(map(int, input().split()))
student = int(input())
for _ in range(student):
a, b = map(int, input().split())
if a % 2 != 0: # 남자인 경우
for i in range(1, N+1):
if i % b == 0:
idx = i-1
if x[idx] == 0:
x[idx] = 1
else:
x[idx] = 0
else: # 여자인 경우
if b < N:
for i in range(1,N):
center = b-1
if x[center] == 0:
x[center] = 1
else:
x[center] = 0
if center-i >= 0 and center+i <= len(x):
if x[center-i] == x[center+i]:
if x[center-i] == 0:
x[center-i] = 1
else:
x[center-i] = 0
if x[center+i] == 0:
x[center+i] = 1
else:
x[center+i] = 0
else:
break
count = 0
for switch in x:
if(count % 20 == 0 and count != 0):
print()
print(int(switch), end=" ")
count += 1
처음엔 이 코드로 제출했는데, 시간 초과가 나서 실패했다 ㅠㅠ