알고리즘

[시뮬레이션] 1244 스위치 켜고 끄기

ghtis1798 2021. 9. 8. 22:24

10. 1244 스위치 켜고 끄기

image

10.1. 문제유형

  • 시뮬레이션

10.2. 해결과정

  1. 여성일 경우와 남성일 경우를 처리하는 함수를 2개 구성했다.
  2. 남성의 경우 받은 번호의 배수에 해당하는 스위치를 Turnoff한다.
    • 배수임을 확인할 때는 입력받은 값을 그대로 사용하되, 인덱싱할 때는 -1 처리한다.
  3. 여성의 경우 받은 번호의 양 옆 대칭인 스위치를 Turnoff한다.
    • 입력받은 값을 -1 처리 후 왼쪽, 오른쪽 값을 인덱싱한다.

10.3. 소스코드


n=int(input())
switch=list(map(int,input().split()))
s=int(input())
students=[list(map(int, input().split())) for _ in range(s)]

def male(num):
    for i in range(1, len(switch)+1):
        if i % num == 0:
            switch[i-1] = (switch[i-1]+1)%2
    return 0

def female(num):
    num = num-1
    s,e = num-1, num+1
    switch[num]=(switch[num]+1)%2
    while True:
        if not (0<=s<n and 0<=e<n):
            return 0
        if switch[s]==switch[e]:
            switch[s]=(switch[s]+1)%2
            switch[e]=(switch[e]+1)%2
        else:
            return 0
        s,e = s-1, e+1

for sex, num in students:
    if sex==1:
        male(num)
    else:
        female(num)

for i in range(len(switch)):
    if i>0 and i%20==0:
        print()
    print(switch[i], end=' ')