풀이 개념
주어진 조건에 따라 구현하면 된다.
우선 남학생과 여학생의 스위치 조작을 따로 함수로 선언한다.
남학생은 while문을 통해 스위치를 차례대로 조작한다.
숫자가 3 일때, switches[2] 조작, switches[5] 조작, switches[8] 조작 ...
여학생도 while문을 통해 스위치를 차례대로 조작하는데, 오프셋 개념을 이용한다.
해당 숫자의 오프셋만큼 +- 하여 체크 후 조작한다.
offset 0 : switches[2] 조작
offset 1 : switches[2 - 1], switches[2 + 1] 조작
offset 2 : switches[2 - 2], switches[2 + 2] 조작...
추가적으로, 스위치 조작은 1을 0으로, 0을 1로 바꾸는 토글 동작으로 이루어진다.
이 역시 함수로 만들어서 이용한다.
풀이
- 입력값들을 알맞게 저장한다.
- 학생 수 만큼 for문을 돌려 각 학생별로 입력을 받고, 성별에 따라 함수를 동작한다.
- 함수는 위의 풀이 개념대로 구현한다.
코드
def switchToggle(switch):
return (0 if switch else 1)
def switchBoy(switches, switch):
idx = switch - 1
while True:
if idx >= len(switches):
break
switches[idx] = switchToggle(switches[idx])
idx += switch
return
def switchGirl(switches, switch):
idx = switch - 1
switches[idx] = switchToggle(switches[idx])
offset = 1
while True:
if idx - offset < 0 or idx + offset >= len(switches):
break
if switches[idx - offset] != switches[idx + offset]:
break
switches[idx - offset] = switchToggle(switches[idx - offset])
switches[idx + offset] = switchToggle(switches[idx + offset])
offset += 1
return
switch_len = int(input())
switches = list(map(int, input().split()))
student_len = int(input())
for i in range(student_len):
sex, switch = map(int, input().split())
if sex == 1:
switchBoy(switches, switch)
else:
switchGirl(switches, switch)
for i in range(0, switch_len, 20):
print(*switches[i : i+20])
참고자료
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[백준 2116 Python] 주사위 쌓기 (0) | 2021.08.01 |
---|---|
[백준 2628 Python] 종이자르기 (0) | 2021.08.01 |
[백준 2669 Python] 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.07.25 |
[백준 2635 Python] 수 이어가기 (0) | 2021.07.25 |
[백준 1904 JAVA] 01타일 (0) | 2021.03.27 |