[baekjoon] 스위치 켜고 끄기

김민서·2024년 1월 15일
0

알고리즘 문제풀이

목록 보기
34/47

링크텍스트

n = int(input())    # 스위치 개수
on_or_off = list(map(int, input().split())) # 스위치 온오프 여부 -> 변경된 이 리스트가 최종 리턴값
list = []
student_n = int(input())    # 학생 수
for _ in range(student_n):
    gender, switch = map(int, input().split())  # 성별, 받은 스위치 번호
    list.append((gender, switch))


def boy(switch): 
    # 스위치 번호가 자기가 받은 수의 배수이면
    # 그 스위치 상태를 바꾼다.
    for i in range(n):
        if (i+1) % switch == 0:
            if (on_or_off[i] == 1): on_or_off[i] = 0
            else: on_or_off[i] = 1
    return on_or_off

def girl(switch):
    # 자기가 받은 수의 번호가 붙은 스위치를 중심으로
    # 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서,
    # 그 구간에 속한 스위치 상태를 모두 바꾼다.
    switch_index = switch - 1
    left, right = switch_index, switch_index
    
    # 해당 스위치 상태는 무조건 바뀌니까.
    if on_or_off[switch_index] == 1: on_or_off[switch_index] = 0
    else: on_or_off[switch_index] = 1
        
    while True: 
        left -= 1
        right += 1
        
        # 배열 끝에 도달하면 Break.
        if left == -1 or right == n or on_or_off[left] != on_or_off[right]: break
        
        if on_or_off[left] == 1: on_or_off[left] = 0
        else: on_or_off[left] = 1
        
        if on_or_off[right] == 1: on_or_off[right] = 0
        else: on_or_off[right] = 1

    return on_or_off

for i in list:
    if i[0] == 1: boy(i[1])
    else: girl(i[1])
print(*on_or_off, sep=' ')

0개의 댓글