풀이 개념

주어진 조건에 따라 구현하면 된다.
우선 남학생과 여학생의 스위치 조작을 따로 함수로 선언한다.

  • 남학생은 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로 바꾸는 토글 동작으로 이루어진다.
이 역시 함수로 만들어서 이용한다.

풀이

  1. 입력값들을 알맞게 저장한다.
  2. 학생 수 만큼 for문을 돌려 각 학생별로 입력을 받고, 성별에 따라 함수를 동작한다.
  3. 함수는 위의 풀이 개념대로 구현한다.

코드

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])

참고자료

  1. 코딩도장 리스트 언패킹

+ Recent posts