스위치 켜고 끄기
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
내 코드
import math
from sys import stdin
# N개의 스위치 상태가 주어짐
# 남자 - 스위치 번호가 자기가 받은 수의 배수면 그 스위치의 상태 바꿈
# ex 남학생 3 -> 3번 6번 스위치의 상태를 바꿈
# 여자 - 자기가 받은 수와 같은 번호가 붙은 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아
# 구간에 속하는 스위치의 상태를 모두 바꾼다. (구간에 속한 스위치 개수는 항상 홀수)
N = int(stdin.readline())
switch = list(map(int, stdin.readline().split()))
T = int(stdin.readline())
for _ in range(T):
sex, number = map(int, stdin.readline().split())
if sex == 1:
# 본인이 받은 스위치의 번호의 배수 상태 변경
# print("남자")
multi = 1
while True:
index = multi * number
if index-1 < len(switch):
switch[index-1] = 1 if switch[index-1] == 0 else 0
multi += 1
else:
break
# print(switch)
else:
# print("여자")
# 본인이 받은 수 기준 대칭 가장 많은 스위치 포함 구간 상태 변셩
middle = number - 1
left = middle - 1
right = middle + 1
while True:
# out of range check
if left < 0 or right >= len(switch):
left += 1
right -= 1
break
# 대칭 체크
if switch[left] == switch[right]:
left -= 1
right += 1
else:
left += 1
right -= 1
break
if left != middle and right != middle:
for i in range(left, right+1):
switch[i] = 1 if switch[i] == 0 else 0
else:
switch[middle] = 1 if switch[middle] == 0 else 0
# print(switch)
for i in range(math.ceil(len(switch)/20)):
print(*switch[i*20: (i+1)*20])
728x90
'Algorithm&CodingTest > Baekjoon' 카테고리의 다른 글
[Baekjoon] [17266] 실버4 - 어두운 굴다리 Python (1) | 2024.01.29 |
---|---|
[Baekjoon] [9017] 실버3 - 크로스 컨트리 Python (0) | 2024.01.24 |
[Baekjoon] [10431] 실버4 - 줄세우기 Python (0) | 2024.01.23 |
[Baekjoon] [1205] 실버4 - 등수 구하기 Python (0) | 2024.01.23 |
[Baekjoon] [20125] 실버4 - 쿠키의 신체 측정 Python (0) | 2024.01.23 |